2015-11-01 78 views
-1

當我編寫了一個簡單的程序來讀取和使用浮動打印一個數字時,我遇到了一些意想不到的結果。浮動值顯示不正確

時,我進入了一個數量100.62,我得到的結果,下面的程序是100.620003。只有八位數才能正確顯示數值。即使我嘗試了不同的數字,問題仍然存在。爲什麼是這樣?除限制小數點外,是否有辦法解決這個問題?

還有沒有辦法打印一個數字,因爲它是?即;如果我輸入100.62則應打印100.62,如果輸入100.623則應打印100.623(不是100.620000和100.623000)。

int main (void) 
{ 
    float i; 
    printf ("Enter a number : "); 
    scanf ("%f", &i); 
    printf ("You entered the number : %f", i) 
    return 0; 
} 
+2

如果您只想打印有效數字,請嘗試使用'%g'。另外:http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – szczurcio

+3

這就是浮點值在計算機上的工作原理。可以在這裏找到一個解釋:[浮點數學是否被破壞?](http://stackoverflow.com/questions/588004/is-floating-point-math-broken) –

回答

1

此問題來自計算機如何處理浮點值。爲了克服這個問題

一種方法是使用停止和float處理的數字爲十進制數據。

要按照原樣打印數字,只需將輸入讀取爲字符串並打印即可。此方法非常簡單,可以支持1e-100001.00000等難度較大的輸入。

-1

據我所知,C總是顯示默認浮點數的完整數字。

如果你想顯示自定義小數點,你應該嘗試使用「.X」的F符號之前。 X是你想在點後顯示的總數。例如:

float i; 
printf ("Enter a number : "); 
scanf ("%f", &i); 
printf ("You entered the number : %.2f", i) 
return 0; 

這將導致點號後的2個數字。如果你輸入100.62,它會顯示爲100.62。但是,這是靜態的。我的意思是,如果你輸入100.623,它將顯示100.62,而不是100.623。您應該確切知道您想要顯示的點數後面有多少個數字。

+0

這將適用於浮點數nubers有'2 '十進制後的數字。一般情況下使用'%g' spcifier。 – ameyCU

+0

是的,我早些時候曾經說過,你應該使用.x來指定點之後你想要的數字(x)。無論如何感謝您的信息。 – Helen