我最近问了一个关于奇怪的 java double floor rounding 的问题,并得到了使用 BigDecimals 的答案,所以尝试了以下代码:
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?