如何从JavaScript数字中删除小数部分?
2022-08-30 00:01:07
我有一个除法的结果,我希望丢弃结果数的小数部分。
我该怎么做?
我有一个除法的结果,我希望丢弃结果数的小数部分。
我该怎么做?
您可以使用...
Math.trunc()
(截断小数部分,另见下文)Math.floor()
(向下舍入)Math.ceil()
(舍入)Math.round()
(舍入为最接近的整数)...取决于你想要如何删除小数。
Math.trunc()
目前并非所有平台(即IE)都受支持,但在此期间,您可以轻松使用polyfill。
截断具有出色平台支持的小数部分的另一种方法是使用按位运算符(.例如 )。对数字使用按位运算符的副作用是,它会将其操作数视为有符号的 32 位整数,从而删除小数分量。请记住,这也会破坏大于 32 位的数字。|0
您可能还在谈论使用浮点算术进行小数舍入的不准确性。
您还可以使用按位运算符截断小数点。
例如:
var x = 9 / 2;
console.log(x); // 4.5
x = ~~x;
console.log(x); // 4
x = -3.7
console.log(~~x) // -3
console.log(x | 0) // -3
console.log(x << 0) // -3
按位运算比 Math 函数的效率高得多。双精度非按位运算符似乎也略微优于按位操作,可以忽略不计。x | 0
x << 0
// 952 milliseconds
for (var i = 0; i < 1000000; i++) {
(i * 0.5) | 0;
}
// 1150 milliseconds
for (var i = 0; i < 1000000; i++) {
(i * 0.5) << 0;
}
// 1284 milliseconds
for (var i = 0; i < 1000000; i++) {
Math.trunc(i * 0.5);
}
// 939 milliseconds
for (var i = 0; i < 1000000; i++) {
~~(i * 0.5);
}
同样值得注意的是,按位 not 运算符优先于算术运算,因此您可能需要用括号将计算括起来才能获得预期结果:
x = -3.7
console.log(~~x * 2) // -6
console.log(x * 2 | 0) // -7
console.log(x * 2 << 0) // -7
console.log(~~(x * 2)) // -7
console.log(x * 2 | 0) // -7
console.log(x * 2 << 0) // -7
有关双按位不运算符的更多信息,请参阅双按位 NOT (~~)