Зачем мне приводить от двойного к целому, а не наоборот? - PullRequest
0 голосов
/ 04 марта 2019

Допустим, у меня есть double и int.

double x = 5;
int y = x;

Когда я это делаю, выдается ошибка, потому что мне нужно явно привести от double к int, как это,

int y = (int) x;

чтобы это работало.Но когда я делаю

int x = 5;
double y = x;

Не выдается никакой ошибки, и она прекрасно работает.Есть ли основания для явного приведения типа double к int, но не наоборот?

Ответы [ 4 ]

0 голосов
/ 04 марта 2019

Согласно Java-документации :

  • int хранится с использованием 32 бит памяти.Он представляет целых чисел между -2 ^ 31 и максимальным значением 2 ^ 31-1 .
  • , двойное значение сохраняется с помощью 64 бита памяти.Он представляет плавающие числа между 2 ^ -1074 и (2-2 ^ -52) · 2 ^ 1023 .

int для удвоения

Учитывая размер двойника в памяти, очевидно, что double может содержать int (который может делать больше, может делать меньше).

double to int

Это приведение не разрешено, поскольку мы теряем информацию.Если мы хотим преобразовать, например, плавающее число, например 1.1618, мы потеряем информацию.«Эквивалентами» этого двойника могут быть 1 или 2, но Java никогда не выберет для вас выбор между символами «=».Вы должны использовать функцию, такую ​​как, например, Math.round(1.1618);, чтобы выбрать, в какое преобразование вы хотите преобразовать ваш дубль в целое число.

0 голосов
/ 04 марта 2019

Потому что, когда вы приводите целое число к двойному, это то же самое высказывание 1 или 1,0.Но когда вы разыгрываете от double до int, это не то же самое, говоря 1.8 или 1, и тогда вы должны явно разыграть его.

0 голосов
/ 04 марта 2019

Помимо потери точности, они имеют разные размеры.

Подумайте о попытке вытащить гардероб из грузовика в багажник автомобиля.Это не сработает, но перенос коробки из багажника автомобиля в грузовик сработает.

int - от 2 до 4 байтов, тогда как double - 8 байтов, как описано здесь TutorialsPoint

0 голосов
/ 04 марта 2019

Double более расширенный тип, чем int. Согласно спецификации вы можете присвоить значение в следующем порядке:

byte -> short -> int -> long -> float -> double

Основная идея:

A расширение примитивное преобразованиене теряет информацию об общей величине числового значения.

Но:

A сужение примитивное преобразование может потерять информацию об общей величинечислового значения, а также может потерять точность и диапазон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...