关于 java 中负数四舍五入的问题——Math.round()

来源:互联网 发布:淘宝价格区间怎么设置 编辑:程序博客网 时间:2024/05/16 08:38

在 java 中负数的四舍五入跟我们平常遇到的情况稍有不同,比如:-9.5,通常四舍五入后应该是  -10,而 java 中通过  java.lang.Math.round(-9.5)  运算后的结果是 -9,为什么呢?其实很简单,这个是 java 对 round 方法的定义导致的,看下 round() 方法的源代码就知道了,看起来这个方法有点偷懒:


/**     * Returns the closest {@code int} to the argument, with ties     * rounding up.     *     * <p>     * Special cases:     * <ul><li>If the argument is NaN, the result is 0.     * <li>If the argument is negative infinity or any value less than or     * equal to the value of {@code Integer.MIN_VALUE}, the result is     * equal to the value of {@code Integer.MIN_VALUE}.     * <li>If the argument is positive infinity or any value greater than or     * equal to the value of {@code Integer.MAX_VALUE}, the result is     * equal to the value of {@code Integer.MAX_VALUE}.</ul>     *     * @param   a   a floating-point value to be rounded to an integer.     * @return  the value of the argument rounded to the nearest     *          {@code int} value.     * @see     java.lang.Integer#MAX_VALUE     * @see     java.lang.Integer#MIN_VALUE     */    public static int round(float a) {        if (a != 0x1.fffffep-2f) // greatest float value less than 0.5            return (int)floor(a + 0.5f);        else            return 0;    }    /**     * Returns the closest {@code long} to the argument, with ties     * rounding up.     *     * <p>Special cases:     * <ul><li>If the argument is NaN, the result is 0.     * <li>If the argument is negative infinity or any value less than or     * equal to the value of {@code Long.MIN_VALUE}, the result is     * equal to the value of {@code Long.MIN_VALUE}.     * <li>If the argument is positive infinity or any value greater than or     * equal to the value of {@code Long.MAX_VALUE}, the result is     * equal to the value of {@code Long.MAX_VALUE}.</ul>     *     * @param   a   a floating-point value to be rounded to a     *          {@code long}.     * @return  the value of the argument rounded to the nearest     *          {@code long} value.     * @see     java.lang.Long#MAX_VALUE     * @see     java.lang.Long#MIN_VALUE     */    public static long round(double a) {        if (a != 0x1.fffffffffffffp-2) // greatest double value less than 0.5            return (long)floor(a + 0.5d);        else            return 0;    }


原创粉丝点击