js实现tofixed
实现 toFixed 方法
JavaScript 中的 toFixed() 方法用于将数字转换为字符串,保留指定的小数位数。以下是一个自定义实现:
function toFixed(number, precision) {
const multiplier = Math.pow(10, precision);
return Math.round(number * multiplier) / multiplier;
}
处理边界情况
上述基础实现可能无法处理所有情况,比如负数或科学计数法。以下是更完整的实现:
function toFixed(number, precision) {
if (isNaN(number) || isNaN(precision)) return 'NaN';
if (precision < 0 || precision > 20) throw new RangeError('Precision must be between 0 and 20');
const numStr = number.toString();
if (numStr.indexOf('e') !== -1) {
return parseFloat(numStr).toFixed(precision);
}
const decimalIndex = numStr.indexOf('.');
if (decimalIndex === -1) {
return numStr + (precision > 0 ? '.' + '0'.repeat(precision) : '');
}
const integerPart = numStr.substring(0, decimalIndex);
let decimalPart = numStr.substring(decimalIndex + 1);
if (decimalPart.length < precision) {
decimalPart += '0'.repeat(precision - decimalPart.length);
} else {
decimalPart = decimalPart.substring(0, precision);
}
return integerPart + (precision > 0 ? '.' + decimalPart : '');
}
四舍五入实现
如果需要精确的四舍五入,可以使用以下方法:

function toFixed(number, precision) {
const shift = function(num, exponent) {
const numArray = ('' + num).split('e');
return +(numArray[0] + 'e' + (numArray[1] ? (+numArray[1] + exponent) : exponent));
};
return shift(Math.round(shift(number, +precision)), -precision).toFixed(precision);
}
注意事项
- 原生
toFixed()在不同浏览器中可能有不同的舍入行为 - 大数字可能导致精度问题
- 负数的处理需要特别小心
- 科学计数法的数字需要转换
这些实现提供了不同级别的功能覆盖,可以根据具体需求选择适合的方案。






