只是為了給出其他人說的話背后的理由。
浮點數(shù)的二進制表示有點煩人。
在二進制語言中,大多數(shù)程序員都知道1b=1d,10b=2d,100b=4d,1000b=8d之間的相關(guān)關(guān)系。
嗯,它也是用另外一種方式工作的。
.1b=.5d,.01b=.25d,.001b=.125,.
問題是,沒有精確的方法來表示大多數(shù)十進制數(shù),如1,2,3等。你所能做的就是用二進制來表示。當數(shù)字打印時,系統(tǒng)會做一些模糊舍入,這樣就可以顯示.1,而不是.10000000000001或.999999999999(它們可能與存儲的表示形式一樣接近于.1)。
編輯評論:這是一個問題的原因是我們的期望。我們完全預(yù)計,當我們將2/3轉(zhuǎn)換為十進制時,2/3會被偽造,無論是7、.67或.666667.但我們并不會自然而然地期望,1的四舍五入和2/3一樣-這就是正在發(fā)生的事情。
順便說一句,如果您好奇的話,它內(nèi)部存儲的數(shù)字是使用二進制“科學(xué)表示法”的純二進制表示。所以,如果您告訴它存儲十進制數(shù)10.75d,它將存儲1010b的10,和.11b的小數(shù)。所以它會存儲.1011,然后在結(jié)尾保存幾個位,說:把小數(shù)點移到右邊四位。
(雖然從技術(shù)上講,它不再是小數(shù)點,但現(xiàn)在它是二進制點,但這一術(shù)語不會讓大多數(shù)人更容易理解,因為他們會找到任何有用的答案。)