js中Number.toFixed()方法的理解


需求:對浮點數進行四舍五入精度獲取。

問題:直接使用Number.toFixed()會出現異常的舍入情況。

原因:計算機浮點數存儲是二進制,js的Number.toFixed()實際的精度確認規則是四舍六入五成雙,逢四下舍,逢六入一,逢五時,根據瀏覽器內核計算結果也不盡相同。

   具體原理這里不做詳細描述,各位看官可自行查閱相關資料。

解決方法:重新Number.toFixed()方法。

實現原理:將浮點數轉化為整數,保留所需位數,再轉為浮點數。

實現代碼:

 1 Number.prototype.toFixed = function (length) {
 2     var s = this + '';
 3     var len = length || 0;
 4     var result = s;
 5     var arr = s.split('.');
 6 
 7     //整數
 8     if (arr.length < 2) {
 9         if (len > 0) {
10             result += '.';
11             for (var i = 1; i <= len; i++) {
12                 result += '0';
13             }
14         }
15         return result;
16     }
17 
18     //小數
19     var first = arr[0];
20     var second = arr[1];
21 
22     //小數點位數等於length
23     if (second.length == len) {
24         return result;
25     }
26 
27     //小數點位數小於length
28     if (second.length < len) {
29         for (var k = 1; k <= len - second.length; k++) {
30             result += '0';
31         }
32         return result;
33     }
34 
35     //小數點位數大於length
36     result = first + second.substr(0, len + 1);
37     var last = Math.floor((result * 1 + 5) / 10);
38     result = (last / Math.pow(10, len)).toFixed(len);
39     return result;
40 };

備注:解決方案有很多種,這只是個人的理解,僅供參考。


免責聲明!

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



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