【轉】javascript 浮點數運算問題

來源:互聯網
上載者:User

標籤:java   問題   javascript   js   簡單   函數   ip   c   

大多數語言在處理浮點數的時候都會遇到精度問題,但是在JS裡似乎特別嚴重,來看一個例子

alert(45.6*13);

結果居然是592.800000000001,當然加法之類的也會有這個問題

那這是js的錯誤嗎?

當然不是,你的電腦做著正確的二進位浮點運算,但問題是你輸入的是十進位的數,電腦以二進位運算,這兩者並不是總是轉化那麼好的,有時候會得到正確的結果,但有時候就不那麼幸運了

alert(0.7+0.1);//輸出0.7999999999999999alert(0.6+0.2);//輸出0.8

你輸入兩個十進位數,轉化為二進位運算過後再轉化回來,在轉化過程中自然會有損失了

但一般的損失往往在乘除運算中比較多,而JS在簡單的加減法裡也會出現這類問題,你也看到了,這個誤差也是非常小的,但是卻是不該出現的

那該怎麼解決呢,ECMA4似乎給瞭解決方法,但是現在倒不是那麼實用的

一種方法,比如0.7+0.1,先把0.1和0.7都乘10,加完之後再除10

另外可以自己寫點函數來解決這個問題,自己百度Google一下應該有很多,但是最好還是不要用JS做一些複雜的浮點運算,畢竟JS更多的作用不在於此

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.