- Как округлить число в java до десятых
- Округление в Java
- Изучаем округление в Java: как в Java округлить число до n знаков после запятой
- Десятичные числа в Java
- Форматирование десятичного числа
- Java: округление Double с помощью BigDecimal
- Округление чисел с плавающей запятой с помощью DoubleRounder
- Метод Math.round() java
- Заключение
- Округление чисел в Java
- Вам также может понравиться.
- Как вывести минимальное и максимальное значение в Java
Как округлить число в 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 > >
Округление в 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
В пакете java.lang есть класс Math , а в этом классе есть 3 метода округления чисел с плавающей точкой до ближайшего целого числа:
Названия методов от английских слов:
Давайте рассмотрим на примере как работают эти методы:
Пример №1
Если Вы запустите данный код на своем компьютере, в консоли Вы увидите:
Комментарии:
1. Math.round () — данный метод округляет до ближайшего целого числа .
И действительно, на входе было 5.25, а метод нам вернул число 5, поскольку ближайшее целое число — это 5. Если бы, например, мы этим методом округляли число 8.75, то мы бы получили 9, потому что это ближайшее целое число.
Также обратите внимание, что данный метод возвращает значение типа int, то есть целое число. На входе было число 5.25, а метод вернул нам не 5.0, а 5
2. Math.floor () — данный метод округляет число до ближайшего целого вниз.
И действительно, у нас было число 5.25, ближайшее число вниз — это 5.0 А если бы мы, например, округляли с помощью этого метода число 8.75, то получили бы число 8.0, потому что ближайшее целое число вниз — это 8.0.
Теперь Вы понимаете почему метод называется floor — «пол» 🙂
Также обратите внимание, что данный метод возвращает значение типа double. На входе у нас было число 5.25, после округления мы получили 5.0 — тип double.
3. Math.ceil() — данный метод округляет число до ближайшего целого вверх. У нас было число 5.25, а вернул нам этот метод число 6.0 Даже если бы у нас было число 5.01, данный метод все равно вернул бы нам 6.0, потому что ближайшее целое число вверх — это 6.0
Вот почему данный метод называется ceil — от слова ceiling, «потолок». Также обратите внимание, что данный метод возвращает значение типа double.
Ниже приводим Вам табличку, где это все расписано схематически.
Также Вы должны знать методы Math.random(), Math.max () и Math.min() . Об этих методах Вы можете почитать вот в этих 2 статьях:
Понравилась статья? А еще можно у нас пройти курс обучения по Java. Детальнее на сайте Vertex Academy.
Вам также может понравиться.
Как вывести минимальное и максимальное значение в Java
21 октября, 2016 Vertex Academy Комментарии к записи Как вывести минимальное и максимальное значение в Java отключены