论如何使用double实现取余计算

/ Java / 0 条评论 / 1052 浏览

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

本篇转自:https://zhuanlan.zhihu.com/p/110822409