[英]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.