rico_rico 2019-06-18 21:01 采纳率: 0%
浏览 539

关于double小数舍入模式的问题

今天在看double的舍入模式,然后看到了BigDecimal的相关文档,对于下面两种模式的舍入有一个小问题没想明白,下面两种舍入模式:

ROUND_HALF_DOWN:

        向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为上舍入的舍入模式。
ROUND_HALF_UP:

        向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。

        保留两位小数的时候对于下面三个的输出结果感到奇怪,为什么0.255舍入后是0.26,0.155和0.355分别是0.15和0.35,有没有大佬能说明一下呀

double d = 0.155;
        double d1 = 0.255;
        double d2 = 0.355;
        BigDecimal bigDecimal = new BigDecimal(d);
        BigDecimal bigDecimal1 = new BigDecimal(d1);
        BigDecimal bigDecimal2 = new BigDecimal(d2);
        System.out.println(bigDecimal.setScale(2, BigDecimal.ROUND_HALF_DOWN).doubleValue());
        System.out.println(bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());

        System.out.println(bigDecimal1.setScale(2, BigDecimal.ROUND_HALF_DOWN).doubleValue());
        System.out.println(bigDecimal1.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());

        System.out.println(bigDecimal2.setScale(2, BigDecimal.ROUND_HALF_DOWN).doubleValue());
        System.out.println(bigDecimal2.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());

输出结果:

0.15

0.15

0.26

0.26

0.35

0.35

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-06-18 21:52
    关注

    四舍六入五凑偶
    被修约的数字等于5时且5的后面没有不为“0”的任何数,要看5前面的数字。
    若是奇数则进位,若是偶数则将5舍掉,即修约后末尾数字都成为偶数;
    从统计学的角度,"四舍六入五凑偶"比"四舍五入"要科学,它使舍入后的结果有的变大,有的变小,更平均。而不是像"四舍五入"那样逢五就入,导致结果偏向大数。

    评论

报告相同问题?