Как преобразовать double в int
Короткий ответ
Приведение (int) отбрасывает дробную часть:
void main() {
double price = 9.99;
int whole = (int) price;
IO.println(whole);
}Результат:
9С округлением
Чтобы округлить до ближайшего, сначала вызовите Math.round(). Он возвращает long, поэтому для int нужно ещё одно приведение:
void main() {
double price = 9.99;
int rounded = (int) Math.round(price);
IO.println(rounded);
}Результат:
10Без потери данных
Math.toIntExact() выбросит исключение, если long не помещается в int:
void main() {
IO.println(Math.toIntExact(Math.round(1e9)));
IO.println(Math.toIntExact(Math.round(1e10)));
}Результат:
1000000000
Exception in thread "main" java.lang.ArithmeticException: integer overflowЧастая ошибка
Приводить слишком большие значения и NaN. Java не выбрасывает исключение, а молча подставляет границу или ноль:
void main() {
IO.println((int) 1e10);
IO.println((int) Double.NaN);
IO.println((int) -1e10);
}Результат:
2147483647
0
-2147483648Функции из этого ответа
- Math.round() — Округляет число до ближайшего целого.
- ArithmeticException — Возникает при недопустимой арифметической операции, например целочисленном делении на ноль.