最近,我问一个关于Java的怪异双楼舍入的问题,并得到了答案使用BigDecimals的代替,所以尝试了下面的代码:的BigDecimal楼舍入出错
BigDecimal velocity = new BigDecimal(-0.07);
BigDecimal afterMultiplyingBy200 = velocity.multiply(new BigDecimal(200.0));
BigDecimal floored = afterMultiplyingBy200.setScale(0, RoundingMode.FLOOR);
System.out.println("After multiplication " + afterMultiplyingBy200);
System.out.println("floored value is " + floored);
而且我得到以下结果
After multiplication -14.000000000000001332267629550187848508358001708984375000
floored value is -15
看来,即使使用BigDecimal,我也无法得到将-0.07乘以200的正确值,有没有什么我可以做的,以得到完全-14.0?
如果您将问题从舍入问题转换为乘法问题,为什么要保留错误的标题? –