2011-10-22 69 views
0

我开始学习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。

任何帮助,将不胜感激。

回答

2

浮点数不是精确表示,而是近似值。

0.03999999910.04f

系统的代表,您可以了解更多关于此here

1

浮点算法不精确;不能保证,如果你从一位小数开始,你将保留一位小数,即使你只做了一些操作,如果你在纸上做的话也会得到相同的小数位数。如果你想保持一定数量的小数(特别是在使用金钱的时候),使用整数并在需要时转换成小数(如果你使用美元,你可以把它看作美分)。

+0

使用整数是很好的建议,但也很辛苦。 –