Бесплатный вебинар
«как найти любимую работу»
Подарки на 150 000 ₽ за участие
Живой эфир
Записи не будет!
00:00:00:00
дн.ч.мин.сек.

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

Быстрый ответ

Для прецизного округления чисел до двух десятичных знаков в Java наиболее рекомендуемо использовать класс BigDecimal в паре с перечислением RoundingMode.UP. Такой подход преодолевает проблемы округления вещественных чисел:

Java
Скопировать код
BigDecimal rounded = new BigDecimal("3.14159").setScale(2, RoundingMode.UP);
System.out.println(rounded); // Выводит на экран "3.15"

BigDecimal предоставляет контроль над округлением без участия третьего знака после запятой.

Кинга Идем в IT: пошаговый план для смены профессии

Рассмотрим преимущества BigDecimal

Точность вычислений — неотъемлемый атрибут успешного приложения. BigDecimal избавляет от ловушек, связанных с вещественными числами:

  • Не доверяете Double?: Тип double предлагает обширный диапазон значений, но зачастую с требуемой точностью бывают проблемы. Если важно гарантированное округление, стоит обойти double стороной.
  • Возвращаемся к строкам: Создание BigDecimal через строку предотвращает нежелательные эффекты округления, вызываемые двоичным представлением чисел с плавающей точкой.

Образец использования BigDecimal

Java
Скопировать код
BigDecimal value = new BigDecimal("123.13698");
BigDecimal rounded = value.setScale(2, RoundingMode.HALF_EVEN);
System.out.println(rounded); // Выводит "123.14"
  • Секрет setScale(): Этот метод устанавливает количество десятичных знаков.
  • RoundingMode.HALF_EVEN: Метод округления, который стремится выбрать ближайшее четное число, если следующая цифра равномерно расположена между двумя числами.

Рассмотрим альтернативы

Простота с Math.round()

Если требуется просто округлить число:

Java
Скопировать код
double result = (double) Math.round(value * 100) / 100;

Математика в действии.

Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Применение класса DecimalFormat для форматирования и округления

Java
Скопировать код
DecimalFormat df = new DecimalFormat("0.00");
String formatted = df.format(2.3456);
System.out.println(formatted); // "2.35"
double backToDouble = Double.parseDouble(formatted);
  • Правила форматирования: "0.00" гарантирует два знака после запятой и округление.
  • Отсутствие лидирующих нулей: Формат "##.00" обеспечивает два знака после запятой, но без лишних нулей в начале.
  • Сохранение консистентности: Возврат преобразованной строки к типу данных double.

Форматирование строк

Java
Скопировать код
System.out.println(String.format("%.2f", 2.3456)); // "2.35"

Визуализация

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

Особенности и нюансы отображения

Внимание, println() может ввести в заблуждение!

Использование System.out.println() может создать иллюзию успешного округления, но реальность может быть иной.

Возвращение к реальности после DecimalFormat

Java
Скопировать код
Number backToNumber = df.parse(formatted);

При конвертации в числовой тип округление с плавающей точкой может возникнуть снова.

BigDecimal против DecimalFormat

  • Для точных вычислений: BigDecimal — ваш выбор.
  • Для визуализации: DecimalFormat подойдет больше.

Заботьтесь о памяти!

BigDecimal потребляет больше памяти, чем примитивные типы данных. Важно уравновесить производительность и точность.

Полезные материалы

  1. BigDecimal (Java Platform SE 8) — документация на BigDecimal.
  2. Round a double to 2 decimal places – Stack Overflow — обсуждение методов округления в Java.
  3. Customizing Formats (The Java™ Tutorials > Internationalization > Formatting) — урок по форматированию чисел в Java.
  4. Rounding off errors in Java – GeeksforGeeks — статья о подводных камнях при округлении чисел.
  5. The Floating-Point Guide – Floating-point cheat sheet for Java — руководство по избеганию ошибок при округлении в Java.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой класс рекомендуется использовать для округления чисел до двух знаков после запятой в Java?
1 / 5