Как double преобразовать в int java
Примитивный тип double можно преобразовать в int явно указав на необходимость преобразования (int) .
Объект Double можно преобразовать с помощью метода intValue() .
Кроме того мы можем использовать методы округления библиотеки Math .
public class App public static void main(String[] args) double f = 5.5; int i = (int) f; System.out.println(i); // => 5 Double d = 5.5; int n = d.intValue(); System.out.println(n); // => 5 // округлим до ближайшего целого числа вверх n = (int) Math.ceil(d); System.out.println(n); // => 6 // округлим до ближайшего целого числа вниз n = (int) Math.floor(d); System.out.println(n); // => 5 // округлим до ближайшего целого числа n = (int) Math.round(d); System.out.println(n); // => 6 > >
Как перевести double в int java
Каждый базовый тип данных занимает определенное количество байт памяти. Это накладывает ограничение на операции, в которые вовлечены различные типы данных. Рассмотрим следующий пример:
int a = 4; byte b = a; // ! Ошибка
В данном коде мы столкнемся с ошибкой. Хотя и тип byte, и тип int представляют целые числа. Более того, значение переменной a, которое присваивается переменной типа byte, вполне укладывается в диапазон значений для типа byte (от -128 до 127). Тем не менее мы сталкиваемся с ошибкой на этапе компиляции. Поскольку в данном случае мы пытаемся присвоить некоторые данные, которые занимают 4 байта, переменной, которая занимает всего один байт.
Тем не менее в программе может потребоваться, чтобы подобное преобразование было выполнено. В этом случае необходимо использовать операцию преобразования типов (операция () ):
int a = 4; byte b = (byte)a; // преобразование типов: от типа int к типу byte System.out.println(b); // 4
Операция преобразования типов предполагает указание в скобках того типа, к которому надо преобразовать значение. Например, в случае операции (byte)a , идет преобразование данных типа int в тип byte. В итоге мы получим значение типа byte.
Явные и неявные преобразования
Когда в одной операции вовлечены данные разных типов, не всегда необходимо использовать операцию преобразования типов. Некоторые виды преобразований выполняются неявно, автоматически.
Автоматические преобразования

Стрелками на рисунке показано, какие преобразования типов могут выполняться автоматически. Пунктирными стрелками показаны автоматические преобразования с потерей точности.
Автоматически без каких-либо проблем производятся расширяющие преобразования (widening) — они расширяют представление объекта в памяти. Например:
byte b = 7; int d = b; // преобразование от byte к int
В данном случае значение типа byte, которое занимает в памяти 1 байт, расширяется до типа int, которое занимает 4 байта.
Расширяющие автоматические преобразования представлены следующими цепочками:
byte -> short -> int -> long
short -> float -> double
Автоматические преобразования с потерей точности
Некоторые преобразования могут производиться автоматически между типами данных одинаковой разрядности или даже от типа данных с большей разрядностью к типа с меньшей разрядностью. Это следующие цепочки преобразований: int -> float , long -> float и long -> double . Они производятся без ошибок, но при преобразовании мы можем столкнуться с потерей информации.
int a = 2147483647; float b = a; // от типа int к типу float System.out.println(b); // 2.14748365E9
Явные преобразования
Во всех остальных преобразованиях примитивных типов явным образом применяется операция преобразования типов. Обычно это сужающие преобразования (narrowing) от типа с большей разрядностью к типу с меньшей разрядностью:
long a = 4; int b = (int) a;
Потеря данных при преобразовании
При применении явных преобразований мы можем столкнуться с потерей данных. Например, в следующем коде у нас не возникнет никаких проблем:
int a = 5; byte b = (byte) a; System.out.println(b); // 5
Число 5 вполне укладывается в диапазон значений типа byte, поэтому после преобразования переменная b будет равна 5. Но что будет в следующем случае:
int a = 258; byte b = (byte) a; System.out.println(b); // 2
Результатом будет число 2. В данном случае число 258 вне диапазона для типа byte (от -128 до 127), поэтому произойдет усечение значения. Почему результатом будет именно число 2?
Число a, которое равно 258, в двоичном системе будет равно 00000000 00000000 00000001 00000010 . Значения типа byte занимают в памяти только 8 бит. Поэтому двоичное представление числа int усекается до 8 правых разрядов, то есть 00000010 , что в десятичной системе дает число 2.
Усечение рациональных чисел до целых
При преобразовании значений с плавающей точкой к целочисленным значениям, происходит усечение дробной части:
double a = 56.9898; int b = (int)a;
Здесь значение числа b будет равно 56, несмотря на то, что число 57 было бы ближе к 56.9898. Чтобы избежать подобных казусов, надо применять функцию округления, которая есть в математической библиотеке Java:
double a = 56.9898; int b = (int)Math.round(a);
Преобразования при операциях
Нередки ситуации, когда приходится применять различные операции, например, сложение и произведение, над значениями разных типов. Здесь также действуют некоторые правила:
- если один из операндов операции относится к типу double , то и второй операнд преобразуется к типу double
- если предыдущее условие не соблюдено, а один из операндов операции относится к типу float , то и второй операнд преобразуется к типу float
- если предыдущие условия не соблюдены, один из операндов операции относится к типу long , то и второй операнд преобразуется к типу long
- иначе все операнды операции преобразуются к типу int
int a = 3; double b = 4.6; double c = a+b;
Так как в операции участвует значение типа double, то и другое значение приводится к типу double и сумма двух значений a+b будет представлять тип double.
byte a = 3; short b = 4; byte c = (byte)(a+b);
Две переменных типа byte и short (не double, float или long), поэтому при сложении они преобразуются к типу int , и их сумма a+b представляет значение типа int. Поэтому если затем мы присваиваем эту сумму переменной типа byte, то нам опять надо сделать преобразование типов к byte.
Если в операциях участвуют данные типа char, то они преобразуются в int:
int d = 'a' + 5; System.out.println(d); // 102
Как перевести double в int java
Для перевода значения типа double в значение типа int в Java можно воспользоваться явным приведением типов. Это позволяет преобразовать значение одного типа данных в значение другого типа данных. Вот пример кода:
double myDouble = 3.14; int myInt = (int) myDouble; System.out.println(myInt); // => 3
Здесь значение переменной myDouble явно приводится к типу int с помощью оператора (int) . Значение переменной myDouble теряет дробную часть и преобразуется в целочисленное значение, которое сохраняется в переменную myInt .
Тип double — вещественные числа
Для работы с вещественными (дробными) числами в Java используется тип double . В памяти он занимает 8 байт (в два раза больше, чем тип int ) и может хранить значения в диапазоне -1.7*10 308 до +1.7*10 308 . Для сравнения: тип int может хранить значение в диапазоне -2*10 9 до +2*10 9 .
В вещественных числах дробная часть записывается после точки. Например, 123.456, или 2.5, или 100.00 или 0.01. Такие числа еще называют числами с плавающей точкой — floating point number – компьютерное название для вещественных чисел.
Кстати, кроме типа double есть еще вещественный тип float (размером всего 4 байта). Его название как раз и происходит от floating point . Название же double происходит от double float . Тип double в два раза больше, чем float : 8 байт против 4 . Его еще называют вещественное число двойной точности .
2. Создание переменной типа double
Тип double используется для хранения вещественных чисел. Чтобы создать в коде переменную, которая будет способна хранить вещественные числа, нужно воспользоваться командой:
double имя;
Создание переменной типа double
Где имя — это имя переменной. Примеры:
double price;
double weight;
double lightSpeed;
Так же, как и с типом int , можно использовать краткую запись для создания нескольких переменных типа double :
double имя1, имя2, имя3;
Создание нескольких переменных типа double
И даже сразу присваивать им значения:
double имя1 = значение1, имя2 = значение2, имя3 = значение3;
Создание и инициализация нескольких переменных типа double
double price = 5.0;
double weight = 2;
double x = 1.0, y = 2.0, z = 3.0;
3. Присваивание целых и вещественных чисел
Было бы плохо, если бы целые числа можно было присваивать только переменным типа int , а вещественные — только переменным типа double . Хотелось бы иметь возможность преобразовывать одни числа в другие. И в Java такая возможность есть.
Во-первых, переменным типа double можно присваивать как вещественные, так и целые числа. При присваивании целых чисел они просто преобразовываются в вещественные. Хотя иногда при этом возможна небольшая потеря точности.
double price = 5.0;
double weight = 2;
int t = 1000; double x = t * t;
Во-вторых, если в каком-то выражении участвуют целое и вещественное число, целое сначала преобразуется в вещественное и только потом взаимодействует с другим вещественным числом.
int t = 1000; double x = t * 5.0;
System.out.println(5 * 2);
System.out.println(5 * 2.0);
И наконец, есть возможность присваивать переменным типа int вещественные числа. Дробная часть числа при этом отбрасывается — число округляется вниз до целого.
Также компилятор требует, чтобы этот факт программист задокументировал явно (чтобы другие программисты понимали, что тут происходит отбрасывание дробной части). Общий вид этого выражения в коде такой:
целочисленная_переменная = (int)(вещественное_число);
Присваивание переменной типа int вещественного числа
int x = (int)(5.5);
double a = 5.999; int x = (int)(a);
double a = 5.999; int b = 2; int x = (int)(a * b);
4. Деление целых и вещественных чисел в Java
При делении целого числа на целое остаток всегда отбрасывается. Как же тогда, скажем, поделить 5 на 2 , чтобы получить 2.5 ?
Поначалу кажется, что правильный вариант такой:
double d = 5 / 2;
Однако не все так просто. Дело в том, что Java-машина сначала вычислит значение выражения 5 / 2 и только потом присвоит результат в переменную d . А деление 5 / 2 выполнится нацело. Т.е. d будет содержать 2 или, если быть более точным, 2.0
Правильный вариант такой: хотя бы одно из чисел, участвующих в делении, нужно записать как вещественное (т.е. с точкой):
double d = 5.0 / 2;
double d = 5 / 2.0;
double d = 5.0 / 2.0;
В любом из этих выражений d будет содержать значение 2.5
А как же быть с переменными? Что если у нас есть такой код:
int a = 5; int b = 2; double d = a / b;
Тут есть хитрое (и очевидное) решение — заставить Java-машину преобразовать переменные в вещественные, умножив их на вещественную единицу — 1.0
int a = 5; int b = 2; double d = a * 1.0 / b;
Обратите внимание, что у операций умножения и деления равный приоритет, и они выполняются слева направо, поэтому имеет значение, где именно мы умножаем на вещественную единицу.
int a = 5; int b = 2; double d = 1.0 * a / b;
int a = 5; int b = 2; double d = a * 1.0 / b;
int a = 5; int b = 2; double d = a / b * 1.0;