Как округлить число вверх или вниз
Короткий ответ
Math.ceil() округляет вверх, Math.floor() — вниз, Math.round() — до ближайшего целого:
void main() {
double value = 4.3;
IO.println(Math.ceil(value));
IO.println(Math.floor(value));
IO.println(Math.round(value));
}Результат:
5.0
4.0
4ceil() и floor() возвращают double, а round() — long.
Сколько страниц
Типичная задача на округление вверх — посчитать количество страниц:
void main() {
int items = 47;
int perPage = 10;
int pages = (int) Math.ceil((double) items / perPage);
IO.println(pages);
IO.println(Math.ceilDiv(items, perPage));
}Результат:
5
5Math.ceilDiv() (Java 18) делает то же самое без дробных чисел.
Отрицательные числа
«Вниз» значит к минус бесконечности, поэтому floor(-4.3) равно -5. Приведение к int просто отбрасывает дробную часть:
void main() {
IO.println(Math.floor(-4.3));
IO.println((int) -4.3);
IO.println(Math.round(-4.5));
}Результат:
-5.0
-4
-4Частая ошибка
Передать в Math.ceil() результат целочисленного деления. Дробная часть уже потеряна:
void main() {
int items = 47;
IO.println(Math.ceil(items / 10));
IO.println(Math.ceil(items / 10.0));
}Результат:
4.0
5.0Функции из этого ответа
- Math.ceil() — Округляет вверх — до ближайшего большего или равного целого.
- Math.floor() — Округляет вниз — до ближайшего меньшего или равного целого.
- Math.round() — Округляет число до ближайшего целого.
- BigDecimal — Точное десятичное число — для денег и расчётов, где недопустимы ошибки округления double.