JavaScript 格式化數字、金額、千分位、保留幾位小數、舍入舍去… 及其浮點數計算精度問題(推薦的類庫 Numeral.js 和 accounting.js)


前端開發中經常會碰到用 JavaScript 格式化數字,最最常見的是格式化金額,一般格式化金額需要千分位分隔,保留2位小數等等。

還有偶然會遇到的使用 js 計算浮點數時出現誤差。

完善的功能函數推薦文章(標題內容):http://www.css88.com/archives/7324#more-7324

 

JavaScript 浮點數計算精度問題簡單解決

摘要: 
由於計算機是用二進制來存儲和處理數字,不能精確表示浮點數,而JavaScript中沒有相應的封裝類來處理浮點數運算,直接計算會導致運算精度丟失。

JavaScript 中的所有數據都是以 64 位浮點型數據(float) 來存儲。所有的編程語言,包括 JavaScript,對浮點型數據的精確度都很難確定

console.log( 0.1 + 0.2 ); //0.30000000000000004

方法一:使用 toFixed 進行四舍五入指定要保留的小數位數

console.log(( 0.1 + 0.2 ).toFixed(1)); // 0.3

缺點:其實不精確,特別對於計算金額類的嚴謹問題不推薦使用,且不同瀏覽器對其計算結果存在差異。

 

方法二:把需要計算的數字升級(乘以10的n次冪)成計算機能夠精確識別的整數,等計算完畢再降級(除以10的n次冪),這是大部分編程語言處理精度差異的通用方法。

console.log((0.1*10 + 0.2*10)/10); // 0.3

額外:http://blog.csdn.net/u012143360/article/details/53148591

通過將浮點數轉換成整數進行計算,然后再將整數的小數點位調整,轉回正確的浮點數結果。

console.log(6.8-0.9); // 5.8999999999999995
console.log(Math.round((6.8-0.9)*10)); // 59
Math.formatFloat = function (f, digit) {
var m = Math.pow(10, digit);
return Math.round(f * m, 10) / m;
};
console.log(Math.formatFloat(6.8-0.9,2)); // 5.9

12年的前輩總結:http://blog.51cto.com/xzllff/831241

13年自定義函數:https://www.cnblogs.com/wangkongming/archive/2013/01/18/2866788.html

17年css88加減乘除函數:http://www.css88.com/archives/7340


免責聲明!

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



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