我正在编写一个程序,基本上可以计算进口汽车的关税。用户应该输入值,汽车和货物的价格值。但是当我计算时,我得到这个不好的错误。
进口汽车的总关税//
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");
}
这些是警告:
1>c:\用户\david\documents\Visual Studio 2013\项目\总费用\总费用\tot.c(9): 警告 C4244:"=":从"双精度"转换为"浮点数",可能会丢失数据
1>c:\用户\david\文档\Visual Studio 2013\项目\总费用\总费用\tot.c(10):警告 C4244:"=":从"双精度"转换为"浮点数",可能会丢失数据
1>c:\用户\david\文档\Visual Studio 2013\项目\总费用\总费用\tot.c(11):警告 C4244:"=":从"双精度"转换为"浮点数",可能会丢失数据
在几行中,您将乘以常量值,例如 0.01
和 0.25
。这些值是双精度值,乘法的结果是双精度值,然后存储在精度较低的浮点变量中。这将为您提供编译器警告。要修复它,您可以将f
文字后缀附加到常量值,例如 0.01f
和0.25f
等
因为sizeof(double) > sizeof(float)
,因此你失去了精度。