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);
};
					    

原文地址:https://www.cnblogs.com/userzf/p/10276527.html