如果我要求 java:
System.out.print(-0.785 % (2*Math.PI));
并打印结果,当它应该打印 5.498 时它显示 -0.785 ......谁能解释我为什么?
第一个操作数为负数,第二个操作数为正数。
[W] 这里既不涉及无穷大,也不涉及零,也不涉及 NaN,被除数 n 除以除数 d 得到的浮点余数 r 由数学关系 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
好的,我不会比其他答案更好地解释它,但我们只说如何获得您想要的结果。
功能:
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)
is 5
, not 0
),所以如果输出是divisor
,就直接返回0
。