在JavaScript中,我如何得到:
一个给定整数除另一个整数的整数倍是多少? 其余的呢?
在JavaScript中,我如何得到:
一个给定整数除另一个整数的整数倍是多少? 其余的呢?
当前回答
Alex Moore-Niemi的评论作为回答:
对于从谷歌搜索divmod的ruby,你可以这样实现它:
function divmod(x, y) {
var div = Math.trunc(x/y);
var rem = x % y;
return [div, rem];
}
结果:
// [2, 33]
其他回答
floor(operation)返回操作的四舍五入值。
第一个问题的例子:
Const x = 5; Const y = 10.4; const z =数学。地板(x + y); console.log (z);
第二个问题的例子:
Const x = 14; Const y = 5; const z =数学。地板(x % y); console.log (x);
我在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.ceil (x / y)
我通常使用:
const quotient = (a - a % b) / b;
const remainder = a % b;
它可能不是最优雅的,但它是有效的。
const idivmod = (a, b) => [a/b |0, a%b];
还有一项关于这个问题的提案 模量和附加整数数学