6

正如我在示例中看到的那样,功能 if~~Math.floor是相同的。他们都向下舍入一个数字(我认为正确吗?)

另外我应该提到,根据这个测试~~Math.floorjsperf.com/math-round-vs更快

~~所以我想知道,和之间有什么区别Math.floor吗?

4

2 回答 2

15

是的,按位运算符通常不能很好地处理负数。前:

~~-6.8 == -6 // doesn’t round down, simply removes the decimals

Math.floor(-6.8) == -7

你也得到0而不是NaN,f.ex:

~~'a' == 0

Math.floor('a') == NaN
于 2012-12-12T19:25:25.227 回答
5

除了大卫回答:

关于 JavaScript 中的位运算,我注意到的一件事是它可以方便地处理较小的值,但并不总是适用于较大的值。出现这种情况的原因是按位运算符仅适用于可以完全以 32 位有符号格式表示的操作数。换句话说,使用按位运算只会产生介于 -2147483648 (-231) 到 2147483647 (231 – 1) 之间的数字。此外,如果使用的操作数之一超出该范围,则将使用数字的最后 32 位而不是指定的数字。

使用 Date 时很容易发现此限制,假设您正在四舍五入毫秒值:

Math.floor(1559125440000.6) // 1559125440000
~~1559125440000.6           // 52311552
于 2019-05-29T11:08:06.010 回答