为什么我得到以下输出:
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?
答案 0 :(得分:2)
当将1.115表示为double时,由于精度损失而发生这种情况:
1.115 = 1.114999999999999991118215803E0
1.125 = 1.125E0
答案 1 :(得分:1)
很确定这只是标准浮点不精确。 0.125 = 1/8,可以二进制表示。 0.115并不是因为它没有完全存储,而且显然是存储在远离你期望的东西的地方。尝试System.out.println
双倍本身。
答案 2 :(得分:0)
<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>