论如何使用double实现取余计算
warning:
这篇文章距离上次修改已过603天,其中的内容可能已经有所变动。
Java 里面由于浮点数不精确的特性,并不能直接用:m - (m / n)* n 计算,应该使用下面的方式
/**
* 求浮点数的取余计算:m/n=x...r
* m、n 不同号的话:返回 m - Math.ceil (m / n) * n; 【 ceil 向上取整 】
* m、n 是同号的话:返回 m - Math.floor (m / n) * n; 【 floor 向下取整 】
*
* @param m 被除数(m为负数则余值为负数,m为正数则余值为正数)
* @param n 除数
* @return 余数
*/
public static double mod(double m, double n) {
return (m / n) > 0.0 ? m - Math.floor(m / n) * n : m - Math.ceil(m / n) * n;
}
上面的计算遇到 mod(Double.MAX_VALUE, 0.1) 的情况下会出现无穷大的结果,不过这是正常情况,不需要关心(即使看起来不正常)
但是在 Java、C/C++ 等语言中,整数 a%b = a-a/b*b