關於JavaScript parseFloat() 函數精度不一致的問題

來源:互聯網
上載者:User

parseFloat() 函數可解析一個字串,並返回一個浮點數。

它的文法是:parseFloat(string);

注釋:只有字串中的第一個數字會被返回,開頭和結尾的空格是允許的。

提示:如果字串的第一個字元不能被轉換為數字,那麼 parseFloat() 會返回 NaN,如果只想解析數位整數部分,請使用 parseInt() 方法。

樣本:

<script type="text/javascript"> document.write(parseFloat("10")) ; document.write(parseFloat("10.00")) ; document.write(parseFloat("10.33")) ; document.write(parseFloat("34 45 66")) ; document.write(parseFloat(" 60 ")) ; document.write(parseFloat("40 years")); document.write(parseFloat("He was 40")); </script>

結果:

 10 10 10.33 34 60 40 NaN

以上是parseFloat() 函數的一個簡介。

下面來分享下遇到的問題,先上一個簡單的例子吧:

例子:var num=parseFloat("234432.9")-parseFloat"0.2");alert(num);結果是:234432.69999999998

很明顯,這個結果不是我們想要的那個結果。

為啥會出現這個問題,說實話,我也不太清楚。但是依靠度娘我解決了這個問題所以先把解決方案分享給大家!

第一種:四捨五入Math.round(parseFloat("234432.9")-parseFloat"0.2")); 
第二種:保留幾位小數
num.toFixed(2); toFixed(n)中的n代表保留幾位

第三種:擴大一定的倍數,對結果在縮小這個倍數
var num1=parseFloat("234432.9")*1000000000000;
var num2=parseFloat("0.2")*1000000000000;
var num3=(num1-num2)/1000000000000;
結果為 234432.7

前兩種做法 不太推薦,毫無疑問,前兩種做法都會降低精度值!所以推薦第三種

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.