繁体   English   中英

为什么我得到不同的BigDecimal舍入结果?

[英]Why I'm getting different BigDecimal rounding results?

为什么我得到以下输出:

1.11

1.13

当运行下面的代码时:

public static void main(String[] args) {

    double aDouble = 1.115;
    double bDouble = 1.125;

    System.out.println(roundTo2Decimal(aDouble));
    System.out.println(roundTo2Decimal(bDouble));
}

public static BigDecimal roundTo2Decimal(double doubleToRound){
    BigDecimal bigDecimal = new BigDecimal(doubleToRound);
    return bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP);
}

而不是预期的结果:

1.12

1.13吗?

这是由于将1.115表示为double时的精度损失:

1.115 = 1.114999999999999991118215803E0
1.125 = 1.125E0

可以肯定的是,这只是标准的浮点不精确度。 0.125 = 1/8,可以用二进制精确表示。 0.115并非如此,因此它并没有被精确地存储,显然,它被存储为与您的期望值接近的东西。 尝试System.out.println双重本身。

<code>
//to achieve what u need change your method to
    public static BigDecimal roundTo2Decimal(double doubleToRound) {
        BigDecimal bigDecimal = new BigDecimal(doubleToRound);
        return bigDecimal.setScale(2, RoundingMode.CEILING);
    }

</code>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM