3 回答
TA贡献1998条经验 获得超6个赞
对于某些数字y
和一些除数,x
将quotient(quotient
)和remainder(remainder
)计算为:
var quotient = Math.floor(y/x);var remainder = y % x;
TA贡献1799条经验 获得超9个赞
我不是按位运算符的专家,但这是获得整数的另一种方法:
var num = ~~(a / b);
这也适用于负数,而Math.floor()
在错误的方向上。
这似乎也是正确的:
var num = (a / b) >> 0;
TA贡献1828条经验 获得超3个赞
我在Firefox上进行了一些速度测试。
-100/3 // -33.33..., 0.3663 millisec
Math.floor(-100/3) // -34, 0.5016 millisec
~~(-100/3) // -33, 0.3619 millisec
(-100/3>>0) // -33, 0.3632 millisec
(-100/3|0) // -33, 0.3856 millisec
(-100-(-100%3))/3 // -33, 0.3591 millisec
/* a=-100, b=3 */
a/b // -33.33..., 0.4863 millisec
Math.floor(a/b) // -34, 0.6019 millisec
~~(a/b) // -33, 0.5148 millisec
(a/b>>0) // -33, 0.5048 millisec
(a/b|0) // -33, 0.5078 millisec
(a-(a%b))/b // -33, 0.6649 millisec
以上是基于每个1000万次试验。
结论:使用(a/b>>0)(或(~~(a/b))或(a/b|0))可以使效率提高约20%。也请记住,他们都是不一致Math.floor的时候a/b<0 && a%b!=0。
添加回答
举报