Нечетное поведение при делении удвоений на Java - программирование
Подтвердить что ты не робот

Нечетное поведение при делении удвоений на Java

Когда я разделяю 317 на 219 в Java, используя парные пары, я получаю 1.
Например:

double b = 317/219;
System.out.println(b);

Выход: 1.

Это потому, что это повторяющееся десятичное число? Им пришлось использовать BigDecimal, а это раздражает.

4b9b3361

Ответ 1

Попробуйте это

 double b = 317/219D;

Тип кодированных чисел по умолчанию в java - это int, поэтому с кодом, который у вас есть, java работает с двумя номерами int, и тогда результат разделения будет также int, который будет обрезать десятичную часть, чтобы дать окончательный результат 1. Этот результат int затем отбрасывается из int 1 в double 1 без предупреждения компилятора, потому что он расширяется (тот, где тип источника гарантированно "подходит" к целевому типу).

Кодируя любое из чисел как double с конечным D (вы также можете использовать D, но я всегда использую буквы верхнего регистра, потому что L, поскольку строчный L выглядит как 1), результат деления будет double тоже.

Ответ 2

Другая альтернатива...

double b = (double)317/219;

Ответ 3

Это потому, что вы использовали целочисленные литералы, поэтому вы выполняете целочисленное деление.

Попробуйте написать double b = 317.0/219.0; вместо этого.

Ответ 4

Стоит отметить, что в вашем примере во время выполнения нет разделения. 317/219 вычисляется во время компиляции (целочисленное деление, фракция отбрасывается) и заменяется на константу. Если вы декомпилируете .class(я использовал Jad http://www.kpdus.com/jad.html), вы увидите

double b = 1.0D;

Ответ 5

Это разделение int. Запись:

double b = 317.0/219;
System.out.println(b);

Ответ 6

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

double b = 317.0/219;
System.out.println(b);

или

double b = ((double)317)/219;
System.out.println(b);

Ответ 7

Вы можете попробовать

double b = 0.0;
b = 317/219;

так что я могу вернуть десятичную точку