Округление в Java
Общие и частные методы округления чисел с плавающей запятой. Округление до заданного числа знаком после запятой и целого.
13 ноября 2017 1 минута 74811

Автор статьи
Илья Бубнов

Автор статьи
Илья Бубнов
https://gbcdn.mrgcdn.ru/uploads/post/1301/og_cover_image/3cabc709e813edd8474f4dbcb80648c7
В 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:
int result = (int)Math.ceil(n);
Как и в жизни, округлять можно не только до целого числа, но и до определенного знака после запятой. Как и в первом случае, в 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 до десятых
Для округления числа воспользуемся методами библиотеки 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 > >
Округления числа до двух знаков
Вот так не пробовал? result1 = result.setScale(2, RoundingMode.HALF_UP); Цифра в скобках указывает в java округление до 2 знаков double типа.
Отслеживать
ответ дан 24 мая 2022 в 16:37
d6xdmxnneee d6xdmxnneee
1 1 1 бронзовый знак
Пробовал ругается на метод Cannot resolve method ‘setScale(int, RoundingMode)’
24 мая 2022 в 16:42
Это не ответ, а короткая догадка. Это в комментарий надо помещать.
24 мая 2022 в 16:53
@d6xdmxnneee, это будет работать только для BigDecimal, для обычных double или Double — нет.
25 мая 2022 в 4:55
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Как в java округлить до целого числа?
Спасибо. Но все же в дальнейшем этот метод будет проходиться в уроках java или некоторые методы нужно будет самому искать в интернете?
26th Mar 2022, 9:32 PM
Спасибо. Подскажите пожалуйста, я сейчас дошёл до темы ооп. Этот код в даленьйшем будет изучаться? Потому что пока я его в уроках не встречал. А задачи с этим кодом стоят в разделе лёгкие. Заранее спасибо
26th Mar 2022, 9:26 PM
Many thanks
26th Mar 2022, 9:43 PM
Int в джава это и есть целое число
28th Mar 2022, 6:31 PM
Мурат Аккизов
Можешь этот код скопировать и посмотреть public class Program < public static void main(String[] args) < int a = (int) 3.14; System.out.println(a); >> (округляется до 3)
28th Mar 2022, 6:33 PM
Мурат Аккизов
Так если написать 3.6 например он округляет в меньшую сторону хотя должен в большую
28th Mar 2022, 8:38 PM
Чтобы округлить до большего числа есть метод Math.ceil() public class Program < public static void main(String[] args) < double c = Math.ceil(7.342); System.out.println(c); >>
29th Mar 2022, 4:08 AM
Мурат Аккизов
Чтобы округлить до меньшего есть метод Math.floor()
29th Mar 2022, 4:08 AM
Мурат Аккизов
Но учти что округленные значения возвращаются с типом double и если тебе нужен int то придется делать как первом коде который я отправил
29th Mar 2022, 4:09 AM
Мурат Аккизов
А есть метод который сам определяет в какую сторону нужно округлить в большую или меньшую допустим 3.3 в меньшую 3.7 в большую?
29th Mar 2022, 10:53 AM
Я таких ещё не видел
29th Mar 2022, 10:56 AM
Мурат Аккизов
Ок. Это только в java так или во всех языках? А то это не очень удобно думать за машину в какую сторону нужно округлять
29th Mar 2022, 10:57 AM
Often have questions like this?
Learn more efficiently, for free: