Глиф Учебники

Как округлить число

Справочник · Java · 1 минута чтения

Округление до целого по школьным правилам — Math.round, вниз — Math.floor, вверх — Math.ceil:

Java
public class Main {
    public static void main(String[] args) {
        System.out.println(Math.round(2.5));
        System.out.println(Math.round(2.4));
        System.out.println(Math.round(-2.5));
        System.out.println(Math.floor(2.7));
        System.out.println(Math.ceil(2.1));
        System.out.println((int) 2.99);
    }
}
Вывод
3
2
-2
2.0
3.0
2

До двух знаков после запятой

Если нужно только вывести число красиво — округляет printf или String.format:

Java
System.out.printf("%.2f%n", 3.14159);

Выведет 3.14 или 3,14 — разделитель зависит от языка системы. Чтобы всегда была точка, укажите язык: String.format(Locale.US, "%.2f", x) (нужен import java.util.Locale;).

Если нужно число с двумя знаками для дальнейших расчётов:

Java
public class Main {
    public static void main(String[] args) {
        double x = 3.14159;
        double rounded = Math.round(x * 100) / 100.0;
        System.out.println(rounded);
    }
}
Вывод
3.14

Число умножается на 100, округляется до целого и делится обратно. Делить нужно на 100.0, а не на 100: иначе деление целых отбросит дробную часть. Для трёх знаков — 1000 и 1000.0.

Точно, для денег: BigDecimal

Дробные double хранятся в двоичном виде приблизительно, и на границе .5 округление может «промахнуться». Для денег и всего, где важна каждая копейка, есть класс BigDecimal:

Java
import java.math.BigDecimal;
import java.math.RoundingMode;

public class Main {
    public static void main(String[] args) {
        BigDecimal exact = new BigDecimal("2.675");
        BigDecimal fromDouble = new BigDecimal(2.675);
        System.out.println(exact.setScale(2, RoundingMode.HALF_UP));
        System.out.println(fromDouble.setScale(2, RoundingMode.HALF_UP));
    }
}
Вывод
2.68
2.67

setScale(2, RoundingMode.HALF_UP) оставляет два знака и округляет по школьному правилу. Создавайте BigDecimal из строки: число 2.675 в double на самом деле чуть меньше — 2.67499999…, и из него получается 2.67.

Подводные камни