На работе мы обнаружили проблему при попытке делить большое число на 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 в конце.
Каков наилучший способ избежать такого поведения? Имейте в виду, что исходное число меня не контролирует.