js取整有n多种办法, 神奇的是, 常用的这一种不仅丑陋, 而且效率差, 并且还会得到错误结果. Omg.

/* 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 按位或操作 or
(a-(a%b))/b        // -33,       0.6649 millisec
((a/b)^0)		   // 异或操作 = xor

原文在这里: https://stackoverflow.com/questions/4228356/integer-division-with-remainder-in-javascript

还有这个中文的: https://www.css88.com/archives/8488

  • 以后, 别再用Math.floor了, 他的结果是错的.
  • 最后一种a%b这个也不是太靠谱, 因为他取决于a是整数.
  • (a/b»0) 这个答案使用的时候, 最外层的括号一般不可以省略, »的优先级特别低, 使用的时候要小心.
Stack Overflow一般都是靠谱的. 但是这个问题的最高分答案是错的:
var quotient = Math.floor(y/x);
var remainder = y % x;

这两个都会得到错误结果,

  • 第一个负数就错了.
  • 第二个依赖于y是整数.

另外还有脑洞很大的思路, 把数字转化为字符串, 然后用小数点做切割. 吼吼. 这个思路和parseInt差不多