Перейти к содержимому

Как в java округлить double до второго знака после запятой

  • автор:

Как округлить число до 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.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

https://kapelnicza.vyvod-iz-zapoya-na-domu-voronezh.ru/