toFixed

Posted userzf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了toFixed相关的知识,希望对你有一定的参考价值。

经典二选一

前者可以 输入 [ 4. ] 后者不行!

运行代码

console.log(toFixed(4.,2))// 1
console.log(toFixed(5.,2))// 1
                        
console.log(4.0 .toFixed(2))// 1
console.log('4.' .toFixed(2))// 1

运行结果

技术分享图片

function toFixed(number, decimal) {
    decimal = decimal || 0;
    var s = String(number);
    var decimalIndex = s.indexOf('.');
    if (decimalIndex < 0) {
        var fraction = '';
        for (var i = 0; i < decimal; i++) {
            fraction += '0';
        }
        return s + '.' + fraction;
    }
    var numDigits = s.length - 1 - decimalIndex;
    if (numDigits <= decimal) {
        var fraction = '';
        for (var i = 0; i < decimal - numDigits; i++) {
            fraction += '0';
        }
        return s + fraction;
    }
    var digits = s.split('');
    var pos = decimalIndex + decimal;
    var roundDigit = digits[pos + 1];
    if (roundDigit > 4) {
        //跳过小数点
        if (pos == decimalIndex) {
            --pos;
        }
        digits[pos] = Number(digits[pos] || 0) + 1;
        //循环进位
        while (digits[pos] == 10) {
            digits[pos] = 0;
            --pos;
            if (pos == decimalIndex) {
                --pos;
            }
            digits[pos] = Number(digits[pos] || 0) + 1;
        }
    }
    //避免包含末尾的.符号
    if (decimal == 0) {
        decimal--;
    }
    return digits.slice(0, decimalIndex + decimal + 1).join('');
}
var a = 19.02
var b = 209.01
// 结果
console.log(toFixed(a, 2)); //==> 19.02
console.log(toFixed(b, 2)); //==> 209.01
console.log(Number(toFixed(a, 2)) < Number(toFixed(b, 2))); //==> true

Number.prototype.toFixed = function (fractionDigits) {
   var num = this;
   return Math.round(num * Math.pow(10, fractionDigits)) / Math.pow(10, fractionDigits);
};
                        

以上是关于toFixed的主要内容,如果未能解决你的问题,请参考以下文章

toFixed内置四舍五入错误

Javascript -- toFixed()函数

js实现的数字四舍五入效果代码实例

JS 重写toFixed方法

JavaScript toFixed() 方法

toFixed方法的bug之解决方法