提问人:Alexander Mills 提问时间:12/16/2022 最后编辑:Alexander Mills 更新时间:12/16/2022 访问量:249
如何在不使用 toFixed() 的情况下在 JavaScript 中舍入数字
How to round a number in JavaScript without using toFixed()
问:
我正在尝试将数字四舍五入到某个小数位,预期的 API 是这样的:
const rounded = Math.round(1.6180339, 5);
或
const rounded = new Number(1.6180339).round(5);
但这些 API 似乎并不存在。我有这个,它似乎可以正常工作:
const [
e,
π,
φ
] = [
2.71828182845904,
3.14159265358979,
1.61803398874989,
];
console.log(
Number(e.toFixed(5)) === 2.71828 // true
);
console.log(
Number(e.toFixed(3)) === 2.718 // true
);
console.log(
Number(e.toFixed(3)) === 2.7182 // false
);
console.log(
Number(e.toFixed(3)) === 2.71 // false
);
这可行,但我们必须使用 toFixed() 它首先将数字转换为字符串。有没有办法在不转换为字符串的情况下直接舍入数字?
答:
2赞
Bertrand
12/16/2022
#1
正如评论中提到的,浮点运算对于 javascript 来说可能很痛苦。无论如何,您仍然可以构建一个像这样的工具,它依靠 10 的幂来执行舍入并避免字符串转换步骤:
const Rounder = {
floor(n, m) {
return Math.floor(n * Math.pow(10, m)) / Math.pow(10, m);
},
ceil(n, m) {
return Math.ceil(n * Math.pow(10, m)) / Math.pow(10, m);
},
round(n, m) {
return Math.round(n * Math.pow(10, m)) / Math.pow(10, m);
}
}
console.log(Rounder.ceil(7.1812828, 3));
console.log(Rounder.floor(7.1812828, 5));
console.log(Rounder.round(7.1812828, 2));
console.log(Rounder.round(0.11111111111, 8));
console.log(Rounder.ceil(0.11111111111, 8));
评论