协慌网

登录 贡献 社区

整数除以 JavaScript 中的余数?

在 JavaScript 中,我如何获得:

  1. 给定整数进入另一个整数的整数倍?
  2. 剩下的?

答案

对于某些数字y和一些除数x将商( quotient )和余数( remainder )计算为:

var quotient = Math.floor(y/x);
var remainder = y % x;

我不是按位运算符的专家,但这是获得整数的另一种方法:

var num = ~~(a / b);

这也适用于负数,而Math.floor()将以错误的方向进行舍入。

这似乎也是正确的:

var num = (a / b) >> 0;

我在 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%。还要记住,当a/b<0 && a%b!=0时,它们都与Math.floor不一致。