3.55
can't be represented exactly in floating point. The internal value is something like 3.54999999999
, which rounds to 3.5
首先要明白浮點數在計算機中都絕大多數是近似值。其實C++對浮點數是自動四舍五入的,而且是非常嚴格地下一位為5則入,小於5則不入。這在double型時一般是沒有問題的。在float型時,因精度低,內存中的近似值可能剛好使決定四舍五入的那一位的5不足額,造成不能四舍五入。例如float x=3.1415;,實際上內存中的二進制換算過來是3.14149999999999...;,這樣取3位小數后就成了3.141而不是3.142了;如果換成double型,立馬就變成3.142了。可以這樣解決就保險了:float型的有效位是6位左右,給要輸出的變量加一個1E-6,四舍五入的問題就解決了。