如果我问java:
System.out.print(-0.785 % (2*Math.PI));
并打印结果,它显示-0.785何时应该打印5.498 ...任何人都可以解释我为什么?
答案 0 :(得分:3)
第一个操作数为负数,第二个操作数为正数。
[W]这里既不是无穷大,也不是零,也不是NaN 从被除数n除以a的浮点余数r 除数d由数学关系r = n - (d·q)定义 其中q是一个整数,只有当n / d为负时才为负数 只有在n / d为正且其幅度大到的情况下才为正 可能不超过真实数学的大小 n和d的商。
没有要求其余部分为正。
此处n
为-0.785
,d
为2 * Math.PI
。幅度不超过真实数学商的最大q
为0.所以......
r = n - (d * q) = -0.785 - (2 * Math.PI * 0) = -0.785
答案 1 :(得分:1)
好的,我不会比the other answer更好地解释它,但我们只是说如何得到你想要的结果。
功能:
static double positiveRemainder(double n, double divisor)
{
if (n >= 0)
return n % divisor;
else
{
double val = divisor + (n % divisor);
if (val == divisor)
return 0;
else
return val;
}
}
发生了什么:
如果n >= 0
,我们只是做一个标准余数。
如果n < 0
,我们首先做一个余数,将其放在(-divisor, 0]
范围内,然后我们添加divisor
,将其置于我们所需的(0, divisor]
范围内。但等等,这个范围是错误的,它应该是[0, divisor)
(5 + (-5 % 5)
是5
,而不是0
),所以如果输出是divisor
,那么而是返回0
。