js中toFixed函数重写代码如下:其重写原因是四舍五入进位有问题
Number.prototype.toFixed = function (n,isEnd){
// n为期望保留的位数,超过限定,报错!
if (n > 20 || n < 0) {
throw new RangeError('toFixed() digits argument must be between 0 and 20');
}
// 获取数字
const number = this;
// 如果是NaN,或者数字过大,直接返回'NaN'或者类似'1e+21'的科学计数法字符串
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();
result = parseFloat(result);
if(isEnd){
return result;
}
return (Math.round((result + Number.EPSILON) * Math.pow(10, n)) / Math.pow(10, n)).toFixed(n,true);
}