我有一个除法的结果,我希望丢弃结果数字的小数部分。
我怎样才能做到这一点?
我有一个除法的结果,我希望丢弃结果数字的小数部分。
我怎样才能做到这一点?
你可以用...
Math.trunc()
(截断小数部分,另见下文)Math.floor()
(向下舍入)Math.ceil()
(围捕) Math.round()
(四舍五入到最接近的整数)...取决于您想如何删除小数。
Math.trunc()
尚不支持所有平台(即 IE),但在此期间您可以轻松使用polyfill。
另一种截断具有出色平台支持的小数部分的方法是使用按位运算符(.eg |0
)。对数字使用按位运算符的副作用是它将其操作数视为有符号的 32 位整数,因此删除了小数部分。请记住,这也会破坏大于 32 位的数字。
您可能还在谈论使用浮点运算进行小数舍入的不准确性。
您还可以使用按位运算符截断小数。
例如
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
按位运算比数学函数高效得多。double not bitwise 运算符似乎也略胜于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);
}
另外值得注意的是,按位非运算符优先于算术运算,因此您可能需要用括号将计算括起来以获得预期结果:
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
关于双位非运算符的更多信息可以在双位非 (~~)
你也可以这样做
parseInt(a/b)
您还可以使用以下代码在小数点后显示一定数量的数字(此处为 2 位数):
var num = (15.46974).toFixed(2)
console.log(num) // 15.47
console.log(typeof num) // string
例如:
var x = 9.656;
x.toFixed(0); // returns 10
x.toFixed(2); // returns 9.66
x.toFixed(4); // returns 9.6560
x.toFixed(6); // returns 9.656000
或者
parseInt("10"); // returns 10
parseInt("10.33"); // returns 10
parseInt("10 20 30"); // returns 10
parseInt("10 years"); // returns 10
parseInt("years 10"); // returns NaN