Вебинары Разобраться в IT Реферальная программа Тесты
Программирование Аналитика Дизайн Маркетинг Управление проектами
12 Июл 2024
2 мин
324

Округление чисел до n десятичных знаков в Java

Пройдите тест, узнайте какой профессии подходите

Одна из распространенных проблем, с которой сталкиваются новички в Java, — это округление чисел до определенного количества десятичных знаков. Например,

Одна из распространенных проблем, с которой сталкиваются новички в Java, — это округление чисел до определенного количества десятичных знаков. Например, имеется число 0.912385, которое требуется округлить до 5 десятичных знаков, причем округление должно происходить по методу «половина вверх», то есть если десятичная дробь для округления равна 5, она всегда округляется вверх до следующего числа.

Метод String.format

Одним из способов сделать это в Java является использование метода String.format. Например:

String.format("%.5g%n", 0.912385);

Этот код вернет 0.91239, что является ожидаемым результатом. Однако этот метод всегда отображает числа с 5 десятичными знаками, даже если они не значимы. Например:

String.format("%.5g%n", 0.912300);

Этот код вернет 0.91230, что не является желаемым результатом, поскольку ожидается 0.9123, без завершающего нуля.

Метод DecimalFormat

Альтернативным способом является использование DecimalFormat:

DecimalFormat df = new DecimalFormat("#.#####");
df.format(0.912385);

Этот код вернет 0.91238. Однако, данный метод использует округление «половина к ближайшему четному», то есть он округлит вниз, если предыдущая цифра четная.

Решение

Чтобы достичь желаемого результата, можно использовать комбинацию BigDecimal и DecimalFormat. Вот пример:

BigDecimal bd = new BigDecimal(Double.toString(0.912385));
bd = bd.setScale(5, RoundingMode.HALF_UP);
DecimalFormat df = new DecimalFormat("#.#####");
df.format(bd.doubleValue());

Этот код сначала преобразует число в BigDecimal, затем устанавливает масштаб до 5 десятичных знаков с округлением вверх, и, наконец, форматирует его в DecimalFormat для удаления завершающих нулей. Это даст ожидаемый результат 0.91239 для 0.912385 и 0.9123 для 0.912300.

Добавить комментарий