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


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

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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM