Java 的 Bigdecimal.divide and rounding
在工作中,我们在尝试将大数字除以1000时发现了一个问题。此数字来自数据库。
假设我有这个方法:
private static BigDecimal divideBy1000(BigDecimal dividendo) {
if (dividendo == null) return null;
return dividendo.divide(BigDecimal.valueOf(1000), RoundingMode.HALF_UP);
}
当我拨打以下电话时
divideBy1000(new BigDecimal("176100000"))
我收到预期值 176100。但是,如果我尝试下面的行
divideBy1000(new BigDecimal("1761e+5"))
我收到值 200000。为什么会发生这种情况?这两个数字是相同的,表示形式不同,最新的是我从数据库中收到的。我明白,不知何故,JVM将数字1761除以1000,向上舍入并在末尾填充0。
避免这种行为的最佳方法是什么?请记住,原始号码不受我的控制。