標籤:gpo 符號 int 概念 http 二進位 大神 就是 article
在碰見這個問題之前我完全沒有這個概念,碰見了特此記錄;
項目js裡面中用到了number*0.2(其中number是一個整數,我測試的時候是259),得到的結果卻是51.80000000000000004這麼個結果,
當時直接蒙逼,根本不知道什麼原因,隨手在java中寫了一個System.out.println(259*0.2),得到一樣的結果;
這個時候覺得就不是資料類型的問題了,上網圍觀大神給出的原因
---------------------------------------------------------------------------------------------------------------------------------------------------
網上有這樣一個問題:0.1+0.2在電腦中的結果
不論java,javascript,python中的結果都是0.30000000000000004
大神給出的原因(轉載:http://blog.csdn.net/zcczcw/article/details/7362473):
電腦中儲存的都是二進位的0和1,而我們現實中的數存入電腦中轉換為二進位時有可能不能整除,也就是不能正好整除,所以用二進位表示現實中的數並計算就產生了誤差。 把十進位的0.1和0.2轉換為二進位:0.1 => 0.0001 1001 1001 1001…(1001無限迴圈)0.2 => 0.0011 0011 0011 0011…(0011無限迴圈)但是我們電腦的硬體儲存的位元是有限制的不可能無限迴圈下去,一般雙精確度浮點數總共佔用64位,、其中最多53位為有效精度數字(包括符號位),所以儲存時:0.1=>0.0001 1001 1001 1001 1001 1001 1001 1001 1001 1001 1001 1001 10010.2=>0.0011 0011 0011 0011 0011 0011 0011 0011 0011 0011 0011 0011 00110.1+0.2=>0.0100 1100 1100 1100 1100 1100 11001 100 1100 1100 1100 1100 1100轉換為十進位就是:0.30000000000000004
java,js中小數計算精度誤差問題