- Math.round() Method in Java
- Java Round to 2 Decimal Places
- Special Cases for Math.round() Method in Java
- Округление в Java
- Изучаем округление в Java: как в Java округлить число до n знаков после запятой
- Десятичные числа в Java
- Форматирование десятичного числа
- Java: округление Double с помощью BigDecimal
- Округление чисел с плавающей запятой с помощью DoubleRounder
- Метод Math.round() java
- Заключение
- Как округлить число в java до десятых
Math.round() Method in Java
If we import the Math class statically and then we can invoke the round() method without calling through its class name.
import static java.lang.Math.*; public class Test < public static void main(String[] args) < System.out.println(round(5.3)); // 5 System.out.println(round(5.5)); // 6 System.out.println(round(5.7)); // 7 >>
The “import static java.lang.Math.*;” statement will import all static members of the Math class. But if we want to import only the round() method of the Math class, not another static method and variables of the Math class then we can use the “import static java.lang.Math.round;” statement. Learn more about static import in Java
import static java.lang.Math.round; public class Test < public static void main(String[] args) < System.out.println(round(5.3)); // 5 System.out.println(round(5.5)); // 6 >>
Java Round to 2 Decimal Places
By default round() method rounds all digits after decimal place but we can write code to round float or double value to n decimal places,
double number = 12.3456789;
// rounding upto 2 decimal places
double n2 = Math.round(number * 100.0) / 100.0;
Java program to round the given value up to 1, 2, and 3 decimal places.
Special Cases for Math.round() Method in Java
1) If the argument is NaN, the result is 0.
System.out.println(Math.round(Float.NaN)); // 0
System.out.println(Math.round(Double.NaN)); // 0
2) While working with “public static int round(float a)”,
- If the argument is negative infinity or any value less than or equal to the value of Integer.MIN_VALUE, the result is equal to the value of the Integer.MIN_VALUE.
- If the argument is positive infinity or any value greater than or equal to the value of Integer.MAX_VALUE, the result is equal to the value of the Integer.MAX_VALUE.
- If the argument is negative infinity or any value less than or equal to the value of Long.MIN_VALUE, the result is equal to the value of Long.MIN_VALUE
- If the argument is positive infinity or any value greater than or equal to the value of Long.MAX_VALUE, the result is equal to the value of Long.MAX_VALUE.
If you enjoyed this post, share it with your friends. Do you want to share more information about the topic discussed above or do you find anything incorrect? Let us know in the comments. Thank you!
Округление в Java
Общие и частные методы округления чисел с плавающей запятой. Округление до заданного числа знаком после запятой и целого.
В Java есть целочисленные типы данных (long, int, char, short, byte) и есть типы с плавающей точкой (float, double), а по-русски — «с плавающей запятой» . Преобразование значений с дробной частью в целочисленные полезно для упрощения вычислений, последующего чтения и для сокращения объемов используемой памяти. Сделать это можно так:
double x = 5.6789; int y = (int)x;
Однако полученный результат может отличаться от ожидаемого. В частности, в данном случае y будет равно 5, несмотря на то, что по всем правилам округления должно быть 6. Чтобы избежать этой многозначности, можно воспользоваться «дедовским» способом, без привязки к возможностям языка.
i=(int )(n+0.5); // классическое округление i=(int )(n+1); //округление до большего целого i=(int )(n);// округление до меньшего целого
Однако данная форма записи имеет множество недостатков, от неправильного результата в частных ситуациях до неудобочитаемой записи в целом. Классический метод округления до целого — round. Допустим, дано число n. Тогда для округления запишем:
int result = (int)Math.round(n);
Если n имеет дробную часть менее 0,5, то число округляется в меньшую сторону, в противном случае — в большую. То есть стандартный математический алгоритм.
Если же вам требуется java округление в меньшую сторону — вместо дополнительной математической операции лучше сразу воспользоваться готовой функций FLOOR:
int result = (int)Math.floor(n);
Java округление в большую сторону выполняется методом CEIL:
Как и в жизни, округлять можно не только до целого числа, но и до определенного знака после запятой. Как и в первом случае, в java округление до сотых можно сделать чисто математически:
n=n*100; int result = (int)Math.round(n); float result2 = (float) result / 100;
Однако запись не слишком удобна, если вам требуется в java округление до плавающего числа знаков с заданным поведением. С помощью методов перечисления RoundingMode() у вас есть такая возможность. Методы следующие:
- UP — округление в сторону большего числа для положительных чисел и меньшего для отрицательных.
- DOWN — округление в сторону меньшего числа для положительных чисел и большего для отрицательных.
- CEILING — округление в сторону большего и для положительных, и для отрицательных чисел.
- FLOOR — округление в сторону меньшего и для положительных, и для отрицательных чисел.
- HALF_UP — округление в большую сторону в случае числа вида 0.5;
- HALF_DOWN — округление в меньшую сторону в случае числа вида 0.5;
- HALF_EVEN — классическое округление
Выглядит подобное округление чисел так:
result1 = result.setScale(2, RoundingMode.HALF_UP);
Цифра в скобках указывает в java округление до 2 знаков double типа.
Специальные методы округления java позволяют разработчику решить любую задачу, не прибегая к грубым мультиязычным способам, содержащим ограничения и ошибки.
Изучаем округление в Java: как в Java округлить число до n знаков после запятой
В этой статье мы рассмотрим, как в Java округлить число до n десятичного знаков.
Десятичные числа в Java
Java предоставляет два примитивных типа, которые могут использоваться для хранения десятичных чисел: float и double . Double — это тип данных, используемый по умолчанию:
Но оба типа данных не должны использоваться для вычисления точных значений . Например, валютных котировок и округления чисел. Для этого лучше применять класс 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() , который принимает два аргумента — значение и масштаб:
По умолчанию он использует тот же метод округления HALF_UP, что хэлпер. Поэтому результаты должны быть одинаковыми.
Кроме этого можно изменить процесс приведения чисел, передав в качестве третьего параметра необходимый метод округления.
Округление чисел с плавающей запятой с помощью DoubleRounder
DoubleRounder — это утилита из библиотеки decimal4j . Она предоставляет быстрый метод округления double чисел до 18 знаков после запятой.
Последнюю версию библиотеки можно найти здесь . Чтобы подключить ее, добавьте зависимость в файл pom.xml :
org.decimal4j decimal4j 1.0.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 .
Как округлить число в 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 > >