为什么我会收到从'double'到"浮点"的转换,可能会丢失数据警告?(三)



我正在编写一个程序,基本上可以计算进口汽车的关税。用户应该输入值,汽车和货物的价格值。但是当我计算时,我得到这个不好的错误。

进口汽车的总关税//

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.010.25 。这些值是双精度值,乘法的结果是双精度值,然后存储在精度较低的浮点变量中。这将为您提供编译器警告。要修复它,您可以将f文字后缀附加到常量值,例如 0.01f0.25f

因为sizeof(double) > sizeof(float),因此你失去了精度。

最新更新