-2

爲什麼當我用乘法c + +浮動四捨五入(錯誤?)

float a= 1.0500000f; 
float b= a*100.0f; 

爲什麼b爲104.99999而不是105.0?

,當我

int f= (int)b; 

f爲104

+3

[浮點數學是否被破壞?](http://stackoverflow.com/questions/588004/is-floating-point-math-broken) –

+4

請參見[here](http://docs.oracle.com/ cd/E19957-01/806-3568/ncg_goldberg.html)爲你需要知道的一切。至於senond部分,這是由於截斷。 – Phylogenesis

+0

在這個網站上有很多關於這個「問題」的問題。閱讀更多http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html –

回答

1

浮點數是不是無限精確 - the wikipedia page on Float numbers是相當有趣的閱讀。

關於第二個問題:(int)b會截斷逗號後面出現的任何內容。這意味着,在你的情況下,104.99999變成104。所以,當你創建一個四捨五入錯誤,然後把它轉換爲一個整數時,你的確有冒險獲得一個較低的數字。

+2

第二部分有點不對,轉換爲'int'不會*向下*,它只是*截斷* 價值。 –

+0

...結果是數字向下舍入。但是,是的,我更新了我的帖子。 –

+0

如果是負值,則不會向下舍入。 – rici