Js取整
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差不多