1. 程式人生 > >【JavaScript】Tofixed(),四捨六入五湊偶,修改成四捨五入

【JavaScript】Tofixed(),四捨六入五湊偶,修改成四捨五入

tofixed(),四捨六入五湊偶,修改成四捨五入

方法一
在JS中四捨五入的函式 toFixed(n) , n為要保留的小數位數。 n為0~20,當n超過20的時候,JS會出錯。

如果小數點前和要擷取的前一位都是0時,不會按常理擷取。
var h=0.07
h.toFixed(1)的值為0.0

其實要解決這個問題,原來是不一定要重寫js中的Number型別的toFixed方法的。
一個很牛的方法是:使用toFixed方法之前加1,使用之後再減去1。

var num = 0.007;//要四捨五入的數字  
var fixNum = new Number(num+1
).toFixed(2);//四捨五入之前加1 var fixedNum = new Number(fixNum - 1).toFixed(2);//四捨五入之後減1,再四捨五入一下 alert(fixedNum);//彈出的數字就是正確的四捨五入結果啦

方法二:
重寫toFixed的指令碼方法
// toFixed相容方法

Number.prototype.toFixed = function (n) {
    if (n > 20 || n < 0) {
        throw new RangeError('tofixed()數字引數必須是0和20之間');
    }
    const
number = this; if (isNaN(number) || number >= Math.pow(10, 21)) { return number.toString(); } if (typeof (n) == 'undefined' || n == 0) { return (Math.round(number)).toString(); } let result = number.toString(); const arr = result.split('.'); // 整數的情況 if
(arr.length < 2) { result += '.'; for (let i = 0; i < n; i += 1) { result += '0'; } return result; } const integer = arr[0]; const decimal = arr[1]; if (decimal.length == n) { return result; } if (decimal.length < n) { for (let i = 0; i < n - decimal.length; i += 1) { result += '0'; } return result; } result = integer + '.' + decimal.substr(0, n); const last = decimal.substr(n, 1); // 四捨五入,轉換為整數再處理,避免浮點數精度的損失 if (parseInt(last, 10) >= 5) { const x = Math.pow(10, n); result = (Math.round((parseFloat(result) * x)) + 1) / x; result = result.toFixed(n); } return result; };