js之toFixed()四捨五入丟失精度的問題解決

2021-10-01 23:41:39 字數 1484 閱讀 4175

1 、tofixed方法

tofixed() 方法可把 number 四捨五入為指定小數字數的數字。例如將資料num保留2位小數,則表示為:tofixed(num);但是其四捨五入的規則與數學中的規則不同,使用的是銀行家捨入規則,銀行家捨入:所謂銀行家捨入法,其實質是一種四捨六入五取偶(又稱四捨六入五留雙)法。具體規則如下:

簡單來說就是:四捨六入五考慮,五後非零就進一,五後為零看奇偶,五前為偶應捨去,五前為奇要進一。

顯然這種規則不符合我們平常在資料中處理的方式。為了解決這樣的問題,可以自定義去使用math.round方法進行自定義式 的實現指定保留多少位資料進行處理。

定義和用法

tofixed() 方法可把 number 四捨五入為指定小數字數的數字。

2 、tofixed方法重寫解決精度丟失

// 直接替換原型鏈上的方法,方便使用

number.prototype.tofixed = function (n)

// 獲取數字

const number = this;

// 如果是nan,或者數字過大,直接返回'nan'或者類似'1e+21'的科學計數法字串

if (isnan(number) || number >= math.pow(10, 21))

// 預設保留整數

if (typeof (n) == 'undefined' || n == 0)

// 先獲取字串

let result = number.tostring();

// 獲取小數部分

const arr = result.split('.');

// 整數的情況,直接在後面加上對應個數的0即可

if (arr.length < 2)

return result;

}// 整數和小數

const integer = arr[0];

const decimal = arr[1];

// 如果已經符合要求位數,直接返回

if (decimal.length == n)

// 如果小於指定的位數,補上

if (decimal.length < n)

return result;

}// 如果到這裡還沒結束,說明原有小數字多於指定的n位

// 先直接擷取對應的位數

result = integer + '.' + decimal.substr(0, n);

// 獲取後面的一位

let last = decimal.substr(n, 1);

if (/^\d(9)[89]$/.test(decimal.substr(n)))

// 大於等於5統一進一位

if (parseint(last, 10) >= 5)

return result;

};

JS中的toFixed 四捨五入方法

方法一 在js中四捨五入的函式 tofixed n n為要保留的小數字數。n為0 20,當n超過20的時候,js會出錯。如果小數點前和要擷取的前一位都是0時,不會按常理擷取。var h 0.07 h.tofixed 1 的值為0.0其實要解決這個問題,原來是不一定要重寫js中的number型別的to...

JS的toFixed的四捨五入精準問題

1.谷歌瀏覽器 55.0.2883.87 m 2.火狐瀏覽器 44.0.2 3.ie瀏覽器 11.545.10586.0 var num 3.445 console.log num.tofixed 2 1.谷歌 3.44 2.火狐 3.44 3.ie 3.45 不同瀏覽器的js引擎對 四捨五入的邊界...

JS的toFixed方法四捨五入修正,保證沒問題

當我們想修正此方法時,變成四捨五入時,網上搜到的方法都是這種,但是下面的這個方法是有問題的 number.prototype.tofixed function b else if this 0 else 如果不信,可以試下用上面的來改寫,然後試試這個 266.215.tofixed 2 結果肯定不是...