js 小數計算為啥和想象中不一樣!

來源:互聯網
上載者:User

標籤:多少   ==   tofixed   mat   style   進位   ros   通過   相加   

           今天遇到了一個比較有趣的事,如果要你計算0.1+0.2等於多少你會怎麼回答? “0.3啊!”你可能都不會考慮。我也一樣,當a=0.1,b=0.2時 if(a+b === 0.3){...}。我可能等一下午都等不到大括弧中的內容被執行。

   為啥呢?因為在js中0.1+0.2=0.30000000000000004。說起來你可能不信,又或者去驗證一下。結果為啥是這樣?在我尋找資料之後豁然開朗。對於浮點型資料,大多語言計算都會丟失精度。但是像c++/java這種厲害的語言都有自己封裝的一套方法解決這一問題。js屬於弱類型解釋性語言。大家可以品一品這句話。

  深究一下為啥會丟失精度?那麼就找到了電腦,電腦說我只認識二進位的數。那麼我們就給他位元。0.1的二進位表示是無限迴圈小數0.0001100110011001100...

0.2的二進位表示是0.0011001100110011...,那麼相加也應該是無限迴圈小數才對啊!不,雙精確度浮點型資料對小數點後最多取52位,所以是 0.01001100110011001100110

01100110011001100110011001100,然後轉化為10進位就是0.30000000000000004。這下是不是就清楚了為啥丟了精度?

       雖然會丟失精度,而且js沒有自己封裝解決辦法,但是這些都沒有好關係,因為我相信所有的問題都有對應的解決辦法。js的解決辦法太多。通過Math對象的api。通過Number對象的toFixed。所以這些都不會影響js 的魅力!

 

2017.8.24 上海!22:10  

 

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.