JS 四舍五入方法 和 toFixed()最全总结(包括toFixed()的坑以及四舍五入实现方法)
JavaScript中的toFixed()
方法用于将数字格式化为指定小数位数的字符串。当使用toFixed()
方法时,数字会被四舍五入到指定的小数位置。
注意:toFixed()
方法返回的是字符串,不是数字。
使用toFixed()方法
let num = 123.456789;
let str = num.toFixed(2); // "123.46" 返回的是字符串
toFixed()的坑
- 当数字为0或者非常接近0时,
toFixed()
可能不工作:
let num = 1e-7;
let str = num.toFixed(2); // "0.00" 正确结果应为 "0.000000"
- 当参数小数位数超过实际数字小数位数时,
toFixed()
可能不工作:
let num = 123;
let str = num.toFixed(3); // "123.000" 正确结果应为 "123.00"
解决方案
为了解决上述问题,可以自定义四舍五入函数:
function roundNumber(num, scale) {
if (!("" + num).includes("e")) {
return +(Math.round(num + "e+" + scale) + "e-" + scale);
} else {
let arr = ("" + num).split("e");
let sig = ""
if (+arr[1] + scale > 0) {
sig = "+";
}
return +(Math.round(+arr[0] + "e" + sig + (+arr[1] + scale)) + "e-" + scale);
}
}
let num = 123.456789;
let str = roundNumber(num, 2); // "123.46"
这个函数首先检查数字是否为科学计数法表示,然后根据指定的小数位数进行四舍五入。返回的仍然是数字类型,不是字符串。
评论已关闭