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

Научитесь округлять числовые значения(float и double) до 2 знаков после запятой в Java. Обратите внимание, что мы можем использовать данные решения для округления до любого количества знаков в соответствии с требованиями.

 двойное число = 4,56789;// 1. Использование Math.round()округлено дважды = Math.round(число * 100.0) / 100.0; // 4.57// 2. Использование BigDecimalBigDecimal округленный = new BigDecimal(number).setScale(2, RoundingMode.HALF_UP); // 4.57// 3. Использование класса точности Apache Commons Mathfloat rounded = Precision.round(number, 2, RoundingMode.ROUND_HALF_EVEN.ordinal()); // 4.57// 4. Отображение округленного значенияДесятичныйФормат df = new DecimalFormat("###.##");Строка округлена = df.format(число); //4.57

1. Использование класса BigDecimal

Использование класса BigDecimal является рекомендуемым подходом для выполнения числовых операций в Java. BigDecimal — это неизменяемый класс, который предоставляет операции для арифметики, масштабирования, округления, сравнения, хеширования и преобразования формата.

Метод BigDecimal.setScale() принимает два аргумента. Первый — масштаб, т.е. количество знаков для округления. Второй — режим округления. Различные режимы округления могут давать разные результаты, поэтому протестируйте их перед финализацией.

В большинстве случаев рекомендуется режим java.math.RoundingMode.HALF_EVEN. Этот режим округляет в сторону «ближайшего соседа», если только оба соседа не равноудалены, в этом случае округление в сторону четного соседа. Иногда его называют «банковским округлением» и в основном используют в США. Этот режим соответствует атрибуту rounding-direction IEEE 754-2019 roundTiesToEven.

float number = 123.456f;BigDecimal bd = new BigDecimal(number);BigDecimal roundedOffBd = bd.setScale(2, java.math.RoundingMode.HALF_EVEN);System.out.println(roundedOffBd); //123.46

2. Использование класса Precision из Commons Math

Подобно BigDecimal, мы можем использовать режим округления HALF_EVEN(или любой другой требуемый режим) с классом Precision, предоставляемым библиотекой Apache commons-math3.

Precision.round(scale, mode) обеспечивает чистый метод, который также легко читается.

float number = 123.456f;float roundedOffNumber = Precision.round(number, 2, RoundingMode.ROUND_HALF_EVEN.ordinal());System.out.println(roundedOffNumber); //123.45

3. Использование Math.round() и деления

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

float number = 123.456f;System.out.println(roundUp(number, 2)); //123.46public static double roundUp(double value, int places) {double scale = Math.pow(10, places);return Math.round(value * scale) / scale;}

4. Отображение округленного значения с использованием DecimalFormat

Если нам нужно отобразить только округленное значение числового числа, мы можем использовать класс DecimalFormat и его метод format(«###.##»).

float number = 123.456f;DecimalFormat df = new DecimalFormat("###.##");System.out.println(df.format(number)); //123.46

5. Заключение

В этом руководстве по Java мы научились округлять заданное число с плавающей точкой до 2 десятичных знаков, используя разные методы. Мы научились использовать класс Decimal(рекомендуется), классы Math, Precision и DecimalFormat. В качестве лучшей практики всегда используйте класс Decimal с режимом округления HALF_EVEN.

Исходный код на Github

Прокрутить вверх