【JavaScript】Tofixed(),四捨六入五湊偶,修改成四捨五入
阿新 • • 發佈:2019-02-01
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;
};