2011-10-22 72 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

使用整數是很好的建議,但也很辛苦。 –