我开始学习C编程,我遇到了这个代码的问题:
#include <stdio.h>
float jobPrice (int numberOfPages, float pricePerSheet, float pricePerPlate, int numberOfCopies)
{
return (((pricePerPlate * numberOfPages) + ((numberOfPages/2)*numberOfCopies*pricePerSheet) + (numberOfCopies*2)) * 1.175f);
}
float colourPrinting (int numberOfPages, int numberOfCopies)
{
return jobPrice(numberOfPages, 0.04f, 28.00f, numberOfCopies);
}
int main ()
{
printf("%f\n", colourPrinting(32, 1000));
return 0;
}
应打印的值为4154.8,但我的程序正在打印4154.799805。我调试了代码,似乎在使用pricePerSheet参数0.04f调用jobPrice时,它正在变为0.0399999991。
任何帮助都将不胜感激。
答案 0 :(得分:2)
答案 1 :(得分:2)
使用double
代替float
。 float
提供最多7个有效十进制数字,并且您的打印格式正在尝试提取10,这会导致垃圾。或者只打印2位小数;这将给你6个重要数字的答案。
有关详细信息,请参阅'What Every Computer Scientist Should Know About Floating-Point Arithmetic'。
答案 2 :(得分:1)
浮点运算不精确;不能保证,如果你从一个小数开始,你将保留一个小数,即使你只做了一些操作,如果你在纸上做了将产生相同的小数。如果你想保持一定数量的小数(特别是在使用金钱时),请使用整数并在需要时转换为十进制(如果你正在使用美元,你可以将其视为美分)。