Pourquoi est-ce que je reçois une conversion de «double» en «flottant», un avertissement possible de perte de données? (C)

J’écris un programme qui calcule essentiellement les droits sur une voiture imscope. L’utilisateur est censé saisir les valeurs pour le prix de la voiture et de l’expédition. Mais quand je calcule, j’obtiens cette erreur qui n’est pas bonne.

// TOTAL IMPOSITION SUR UNE VOITURE IMPORTÉE //

main() { float purchaseprice, shipmentcosts, ecowaslevy, importlevy, GCNETlevy, TotalDuty; printf("Enter the purchase price and shipment cost"); scanf("%f,%f", &purchaseprice, &shipmentcosts); ecowaslevy = 0.01f, importlevy = 0.25f, GCNETlevy = 0.05f; //FORMULAS FOR THE LEVY// ecowaslevy = (purchaseprice + shipmentcosts) * (0.01); importlevy = (purchaseprice + shipmentcosts) * (0.25); GCNETlevy = (purchaseprice + shipmentcosts) * (0.05); //FORMULA FOR TOTAL DUTY// TotalDuty = (ecowaslevy + importlevy + GCNETlevy)*(3.2); printf("TOTAL DUTY=GHC.%f", TotalDuty); system("pause"); } 

Ce sont les avertissements:

1> c: \ utilisateurs \ david \ documents \ visual studio 2013 \ projets \ dépenses totales \ dépenses totales \ tot.c (9): avertissement C4244: ‘=’: conversion de ‘double’ en ‘float’, perte possible de Les données

1> c: \ utilisateurs \ david \ documents \ visual studio 2013 \ projets \ dépenses totales \ dépenses totales \ tot.c (10): avertissement C4244: ‘=’: conversion de ‘double’ en ‘float’, perte possible de Les données

1> c: \ utilisateurs \ david \ documents \ visual studio 2013 \ projets \ dépenses totales \ dépenses totales \ tot.c (11): avertissement C4244: ‘=’: conversion de ‘double’ en ‘float’, perte possible de Les données

Sur plusieurs lignes, vous multipliez par des valeurs constantes telles que 0.01 et 0.25 . Ces valeurs sont des doubles et le résultat de la multiplication est le double de celui que vous stockez ensuite dans une variable float ayant moins de précision. Cela vous donne un avertissement du compilateur. Pour résoudre ce problème, vous pouvez associer le suffixe littéral f aux valeurs constantes, par exemple 0.01f et 0.25f etc.

Parce que sizeof(double) > sizeof(float) et par conséquent vous perdez la précision.