Округление чисел в Java

Числа с плавающей точкой (float, double) применяются при вычислении выражений, в которых требуется точность до десятичного знака. Высокая точность часто нужна в бухгалтерских и других вычислительных операциях. Но всегда ли нам нужен длинный “хвост” чисел после запятой? Может нам достаточно точности в три знака вещественной части? И есть нас такой вариант устраивает, как правильно выполнить округление? Именно об этом мы сегодня и поговорим: рассмотрим способы округления чисел в Java .
String format

В качестве первого способа мы рассмотрим округление double: В результате мы отформатируем наше число с плавающей запятой 34766674 с точностью до 3 десятичных разрядов , так как в инструкции для форматирования мы указали три знака после запятой «%.3f. В свою очередь %f при форматировании строки обозначает тип чисел с плавающей запятой, которое включает в себя тип данных double и float в Java. В примере выше мы выводили полученное значение в консоль. Теперь вопрос: как бы можно было это сократить? Все просто: нужно использовать printf, который в свою очередь является format + print. В итоге предыдущий пример у нас сократился бы до: У экземпляра out класса PrintStream помимо этого метода есть ещё метод format, который работает аналогично: Округление происходит по режиму HALF_UP — в сторону числа, которое ближе к обрезаемому (к 0 или 10). Если же эти числа равноудалены (в случае с 5), то округление выполняется в большую сторону. Пример: Более подробно режимы округления мы разберем чуть ниже.
DecimalFormat
Math.ceil() округляет до ближайшего целого числа вверх, но отдаёт не целочисленный тип, а double:
Даже если у нас будет 34.0000000, все равно после использования Math.ceil мы получим 35,0.
Math.floor() округляет до ближайшего целого вниз, также результатом отдаёт double:
Опять же, даже если у нас будет значение 34.999999999, то после использования Math.floor мы получим 34,0.
Math.round () — округляет до ближайшего целого числа, как результат отдаёт int:
Если у нас число 34.5, округление выполняется до 35, если же чуть чуть меньше 34.499, число обрезается до 34.
Чтобы не просто обрезать всю вещественную часть, а регулировать этот процесс до определенного количества знаков и при этом округлять, число умножают на 10^n (10 в степени n), где n равно количеству необходимых знаков после запятой. После этого применяют какой-нибудь метод класса Math для округления, ну а затем снова делят на 10^n:
Округление дробных чисел до целых
Какие существуют в Java стандартные средства для округления чисел?
- Пример округления: 3.49 — 3, 3.50 — 4, 3.51 — 4.
- Math.ceil(n) — возвращает наименьшее целое число, которое больше или равно аргумента n.
- Math.floor(n) — возвращает наибольшее целое число, которое меньше или равно аргументу n.
- Math.round(n) — возвращает целое число, ближайшее к аргументу n (округляет n).
![]()
В годы моей юности, когда не было таких умных методов round/ceil/floor , округление делали примерно так:
Метод Math.round() в Java возвращает long или int (целое число), ближайшее к вещественному числу, double или float , аргумента. Иными словами — осуществляет округление до целых чисел.
![]()
![]()
вот правильный код:
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.6.8.43486
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Округление чисел в Java

В пакете java.lang есть класс Math , а в этом классе есть 3 метода округления чисел с плавающей точкой до ближайшего целого числа:

Названия методов от английских слов:
round — от англ. «округлять»
floor — от англ. «пол»
ceiling — от англ. «потолок»

Давайте рассмотрим на примере как работают эти методы:
Пример №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
The java.lang.Math.round() is a built-in math function which returns the closest long to the argument. The result is rounded to an integer by adding 1/2, taking the floor of the result after adding 1/2, and casting the result to type long.
- If the argument is NaN, the result is 0.
- 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 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 Integer.MAX_VALUE.
Syntax:
Returns:
The method returns the value of the argument rounded to the nearest int value.