Если вы знаете из внешних доказательств, что точный ответ в определенной точке вашего кода должен быть целым числом, округленным до ближайшего целого числа.
В противном случае вы получите самый точный двойной результат, полностью выполнив ваши вычисления, используя DecimalFormat для печати только значимых цифр.
Нет ничего особенного в теме «java rounding». Особенность заключается в том, что выход по умолчанию сохраняет достаточно цифр, чтобы однозначно идентифицировать double. Многие другие языки, по умолчанию, округляются до меньшего количества цифр, теряя точность, но результаты выглядят более аккуратными.
Использование BigDecimal является крупной победой, если каждое число в вычислении может быть точно представлено как короткая десятичная дробь. Это часто происходит для расчетов в валюте. Однако, как только вы нажмете дробь, такую как 1/3, которая не может быть точно представлена каким-либо конечным числом десятичных цифр, вы все равно должны иметь дело с ошибкой округления. Для многих финансовых расчетов существуют фиксированные правила округления.
Теоретически BigDecimal также может использоваться для получения дополнительной точности, но это редко бывает практичным.
Зачем беспокоиться? Просто используйте 'BigDecimal' и не беспокойтесь об этом. – TedTrippin
Обычно вы сравниваете его с произвольным значением epsilon. Хотя назвать его «проблемой округления» кажется немного странным, поскольку никто не делает округления, и никто не просил об этом. –
Вы всегда должны предположить, что существует потенциальная проблема округления, если вы не знаете, что нет –