Когда я разделяю 317 на 219 в Java, используя парные пары, я получаю 1.
Например:
double b = 317/219;
System.out.println(b);
Выход: 1.
Это потому, что это повторяющееся десятичное число? Им пришлось использовать BigDecimal, а это раздражает.
Когда я разделяю 317 на 219 в Java, используя парные пары, я получаю 1.
Например:
double b = 317/219;
System.out.println(b);
Выход: 1.
Это потому, что это повторяющееся десятичное число? Им пришлось использовать BigDecimal, а это раздражает.
Попробуйте это
double b = 317/219D;
Тип кодированных чисел по умолчанию в java - это int
, поэтому с кодом, который у вас есть, java работает с двумя номерами int
, и тогда результат разделения будет также int
, который будет обрезать десятичную часть, чтобы дать окончательный результат 1
. Этот результат int
затем отбрасывается из int 1
в double 1
без предупреждения компилятора, потому что он расширяется (тот, где тип источника гарантированно "подходит" к целевому типу).
Кодируя любое из чисел как double
с конечным D
(вы также можете использовать D
, но я всегда использую буквы верхнего регистра, потому что L
, поскольку строчный L
выглядит как 1
), результат деления будет double
тоже.
Другая альтернатива...
double b = (double)317/219;
Это потому, что вы использовали целочисленные литералы, поэтому вы выполняете целочисленное деление.
Попробуйте написать double b = 317.0/219.0;
вместо этого.
Стоит отметить, что в вашем примере во время выполнения нет разделения. 317/219 вычисляется во время компиляции (целочисленное деление, фракция отбрасывается) и заменяется на константу. Если вы декомпилируете .class(я использовал Jad http://www.kpdus.com/jad.html), вы увидите
double b = 1.0D;
Это разделение int
. Запись:
double b = 317.0/219;
System.out.println(b);
так как числа, которые вы положили, являются inetgers, так что это ответ.
для получения двойного значения вам нужно либо использовать число с плавающей запятой, либо использовать одно из целых чисел:
double b = 317.0/219;
System.out.println(b);
или
double b = ((double)317)/219;
System.out.println(b);
Вы можете попробовать
double b = 0.0;
b = 317/219;
так что я могу вернуть десятичную точку