個人對於JavaScript中Number.toFixed()方法的理解
阿新 • • 發佈:2018-11-06
需求:對浮點數進行四捨五入精度獲取。
問題:直接使用Number.toFixed()
會出現異常的舍入情況。
原因:計算機浮點數儲存是二進位制,js
的Number.toFixed()
實際的精度確認規則是四捨六入五成雙,逢四下舍,逢六入一,逢五時,根據瀏覽器核心計算結果也不盡相同。
具體原理這裡不做詳細描述,各位看官可自行查閱相關資料。
解決方法:重新Number.toFixed()
方法。
實現原理:將浮點數轉化為整數,保留所需位數,再轉為浮點數。
實現程式碼:
Number.prototype.toFixed = function (length) { var s = this + ''; var len = length || 0; var result = s; var arr = s.split('.'); //整數 if (arr.length < 2) {//前端全棧交流學習圈:866109386 if (len > 0) { //面向1-3年經驗的前端開發人員 result += '.';//幫助突破技術瓶頸,提升思維能力 for (var i = 1; i <= len; i++) { result += '0'; } } return result; } //小數 var first = arr[0]; var second = arr[1]; //小數點位數等於length if (second.length == len) { return result; } //小數點位數小於length if (second.length < len) { for (var k = 1; k <= len - second.length; k++) { result += '0'; } return result; } //小數點位數大於length result = first + second.substr(0, len + 1); var last = Math.floor((result * 1 + 5) / 10); result = (last / Math.pow(10, len)).toFixed(len); return result; };
備註:解決方案有很多種,這只是個人的理解,僅供參考。