Как округлить число до N знаков после запятой в Java
В этом коротком руководстве мы узнаем, как округлить число до n знаков после запятой в Java.
2. Десятичные числа в Java
Java предоставляет два примитивных типа, которые мы можем использовать для хранения десятичных чисел: float и double . Двойной тип по умолчанию:
double PI = 3.1415;
Однако мы никогда не должны использовать любой тип для точных значений , таких как валюты. Для этого, а также для округления мы можем использовать класс BigDecimal .
3. Форматирование десятичного числа
Если мы просто хотим напечатать десятичное число с n цифрами после запятой, мы можем просто отформатировать выходную строку:
System.out.printf("Value with 3 digits after decimal point %.3f %n", PI); // OUTPUTS: Value with 3 digits after decimal point 3.142
В качестве альтернативы мы можем отформатировать значение с помощью класса DecimalFormat :
DecimalFormat df = new DecimalFormat("###.###"); System.out.println(df.format(PI));
DecimalFormat позволяет нам явно установить поведение округления, предоставляя больший контроль над выводом, чем String.format(), использованный выше.
4. Округление двойных чисел с помощью BigDecimal
Чтобы округлить double s до n знаков после запятой, мы можем написать вспомогательный метод :
private static double round(double value, int places) if (places 0) throw new IllegalArgumentException(); BigDecimal bd = new BigDecimal(Double.toString(value)); bd = bd.setScale(places, RoundingMode.HALF_UP); return bd.doubleValue(); >
В этом решении следует отметить одну важную вещь; при создании BigDecimal мы всегда должны использовать конструктор BigDecimal(String) . Это предотвращает проблемы с представлением неточных значений.
Мы можем добиться того же результата, используя математическую библиотеку Apache Commons :
dependency> groupId>org.apache.commonsgroupId> artifactId>commons-math3artifactId> version>3.5version> dependency>
Последнюю версию можно найти здесь .
Как только мы добавим библиотеку в проект, мы можем использовать метод Precision.round() , который принимает два аргумента — значение и масштаб:
Precision.round(PI, 3);
По умолчанию он использует тот же метод округления HALF_UP , что и наш вспомогательный метод; следовательно, результаты должны быть одинаковыми.
Обратите внимание, что мы можем изменить поведение округления, передав желаемый метод округления в качестве третьего параметра.
5. Округление двойников с помощью DoubleRounder
DoubleRounder — это утилита в библиотеке decimal4j . Он обеспечивает быстрый и безотходный метод округления двойных значений от 0 до 18 знаков после запятой.
Мы можем получить библиотеку (последнюю версию можно найти здесь ), добавив зависимость в pom.xml :
dependency> groupId>org.decimal4jgroupId> artifactId>decimal4jartifactId> version>1.0.3version> dependency>
Теперь мы можем просто использовать:
DoubleRounder.round(PI, 3);
Однако DoubleRounder дает сбой в нескольких сценариях:
System.out.println(DoubleRounder.round(256.025d, 2)); // OUTPUTS: 256.02 instead of expected 256.03
6. Метод Math.round()
Другой способ округления чисел — использовать метод Math.Round() .
В этом случае мы можем контролировать n количество знаков после запятой, умножив и разделив на 10^n :
public static double roundAvoid(double value, int places) double scale = Math.pow(10, places); return Math.round(value * scale) / scale; >
Этот метод не рекомендуется, так как он усекает значение . Во многих случаях значения округляются неправильно:
System.out.println(roundAvoid(1000.0d, 17)); // OUTPUTS: 92.23372036854776 !! System.out.println(roundAvoid(260.775d, 2)); // OUTPUTS: 260.77 instead of expected 260.78
В результате этот метод указан здесь только в учебных целях.
7. Заключение
В этой статье мы рассмотрели различные способы округления чисел до n знаков после запятой.
Мы можем просто отформатировать вывод без изменения значения или округлить переменную с помощью вспомогательного метода. Мы также обсудили несколько библиотек, решающих эту проблему.
Код, использованный в этой статье, можно найти на GitHub .
Как округлить число в java до десятых
Для округления числа воспользуемся методами библиотеки Math .
round() — округлит по правилам округления (дробная часть меньше 0,5 — округление в меньшую сторону, в противном случае в большую).
floor() — округлит в меньшую сторону.
ceil() — округлит в большую сторону.
public class App public static void main(String[ ] args) double number = Math.PI; double count = 10; double roundNumber = Math.round(number * count) / count; System.out.println(roundNumber); // => 3.1 double floorNumber = Math.floor(number * count) / count; System.out.println(floorNumber); // => 3.1 double ceilNumber = Math.ceil(number * count) / count; System.out.println(ceilNumber); // => 3.2 > >
Округление числа double до двух десятичных знаков в Java
Часто при программировании на языке Java возникает потребность в округлении чисел с плавающей точкой. Например, может быть задача, при которой число 123.4567 должно быть округлено до двух десятичных знаков и приведено к виду 123.45 . Аналогично, если исходное число целое, например 123 , то результатом округления должно стать число 123.00 .
Рассмотрим, как эту задачу можно решить средствами Java.
Использование метода Math.round()
Одним из способов округления чисел является использование метода Math.round() . Данный метод округляет число до ближайшего целого. Чтобы округлить число до двух десятичных знаков, число сначала умножается на 100, округляется до ближайшего целого, а затем делится на 100.
double number = 123.4567; double roundedNumber = Math.round(number * 100.0) / 100.0;
В результате roundedNumber будет содержать значение 123.45 .
Использование класса DecimalFormat
Еще одним способом округления чисел является использование класса DecimalFormat . Этот класс предоставляет возможность форматировать числа с плавающей точкой с использованием различных шаблонов.
double number = 123.4567; DecimalFormat df = new DecimalFormat("#.##"); double roundedNumber = Double.valueOf(df.format(number));
В результате roundedNumber будет содержать значение 123.45 .
Важно отметить, что при использовании класса DecimalFormat исходное число не изменяется, а создается новое число, которое соответствует заданному формату.
В зависимости от конкретной ситуации можно выбрать наиболее подходящий способ округления.
Изучаем округление в Java: как в Java округлить число до n знаков после запятой
В этой статье мы рассмотрим, как в Java округлить число до n десятичного знаков.
Десятичные числа в Java
Java предоставляет два примитивных типа, которые могут использоваться для хранения десятичных чисел: float и double . Double — это тип данных, используемый по умолчанию:
double PI = 3.1415
Но оба типа данных не должны использоваться для вычисления точных значений . Например, валютных котировок и округления чисел. Для этого лучше применять класс BigDecimal .
Форматирование десятичного числа
Если нужно вывести десятичное число с n знаками после запятой, можно отформатировать выходную строку:
System.out.printf("Value with 3 digits after decimal point %.3f %n", PI); // Вывод: Значения с 3 знаками после запятой 3.142
Также можно округлить значение с помощью класса DecimalFormat :
DecimalFormat df = new DecimalFormat("###.###"); System.out.println(df.format(PI));
Этот класс позволяет настроить процесс округления числа.
Java: округление Double с помощью BigDecimal
Чтобы округлить тип double до n знаков после запятой, можно написать helper-метод :
private static double round(double value, int places)
Обратите внимание, что при создании экземпляра класса BigDecimal мы должны всегда использовать конструктор BigDecimal(String) . Это позволяет избежать проблем с представлением неточных значений.
Можно сделать то же самое, используя библиотеку Apache Commons Math :
org.apache.commons commons-math3 3.5
Актуальную версию этой библиотеки можно найти здесь. Для округления чисел применяется метод Precision.round() , который принимает два аргумента — значение и масштаб:
Precision.round(PI, 3);
По умолчанию он использует тот же метод округления HALF_UP, что хэлпер. Поэтому результаты должны быть одинаковыми.
Кроме этого можно изменить процесс приведения чисел, передав в качестве третьего параметра необходимый метод округления.
Округление чисел с плавающей запятой с помощью DoubleRounder
DoubleRounder — это утилита из библиотеки decimal4j. Она предоставляет быстрый метод округления double чисел до 18 знаков после запятой.
Последнюю версию библиотеки можно найти здесь. Чтобы подключить ее, добавьте зависимость в файл pom.xml :
org.decimal4j decimal4j 1.0.3
Пример использования утилиты:
DoubleRounder.round(PI, 3);
Но DoubleRounder дает сбой в нескольких сценариях. Например:
System.out.println(DoubleRounder.round(256.025d, 2)); // OUTPUTS: 256.02 вместо ожидаемого 256.03
Метод Math.round() java
При использовании метода Math.round() можно контролировать п -количество десятичных разрядов путем умножения и деления на 10^п :
public static double roundAvoid(double value, int places) < double scale = Math.pow(10, places); return Math.round(value * scale) / scale; >
Этот метод не рекомендуется использовать для округления чисел, поскольку он усекает значение . Во многих случаях значения округляются неправильно:
System.out.println(roundAvoid(1000.0d, 17)); // Вывод: 92.23372036854776 !! System.out.println(roundAvoid(260.775d, 2)); // Вывод: 260.77 вместо ожидаемого 260.78
Заключение
В этой статье мы рассмотрели различные методы округления чисел до n знаков после запятой, доступные в Java.
Можно просто отформатировать вывод без изменения значения или округлить переменную с помощью вспомогательного метода или подключаемых библиотек.
Код, использованный в этой статье, доступен на GitHub.