如何从JavaScript数字中删除小数部分?
我有分部的结果,我希望丢弃结果数字的小数部分。
我怎样才能做到这一点?
你可以使用...
Math.trunc()
(截断小数部分,也见下文) Math.floor()
(向下舍入) Math.ceil()
(向上舍入) Math.round()
(舍入到最接近的整数) ...取决于你想如何去除小数。
所有平台(即IE)都不支持Math.trunc()
,但在此期间可以轻松使用polyfill。
通过使用按位运算符(.eg |0
),以极好的平台支持截断小数部分的另一种方法是使用按位运算符(.eg |0
)。 在数字上使用按位运算符的副作用是将其操作数视为有符号的32位整数,因此会删除小数部分。 请记住,这也会破坏大于32位的数字。
你也可能在谈论用浮点算法进行小数舍入的不准确性。
必读 - 每位计算机科学家应了解的浮点运算。
你也可以做
parseInt(a/b)
您也可以使用按位运算符来截断小数。
例如
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不按位运算符似乎也稍微超过了x | 0
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
有关双位非运算符的更多信息可以在双位NOT(~~)中找到。
链接地址: http://www.djcxy.com/p/77449.html上一篇: How can I remove the decimal part from JavaScript number?
下一篇: New to Javascript