Вопрос-ответ

Int division: Why is the result of 1/3 == 0?

Int division: почему результат 1/3 == 0?

Я писал этот код:

public static void main(String[] args) {
double g = 1 / 3;
System.out.printf("%.2f", g);
}

Результат равен 0. Почему это так и как мне решить эту проблему?

Переведено автоматически
Ответ 1

Два операнда (1 и 3) являются целыми числами, поэтому используется целочисленная арифметика (здесь используется деление). Объявление результирующей переменной как double просто приводит к неявному преобразованию, которое происходит после деления.

Целочисленное деление, конечно, возвращает истинный результат деления, округленный до нуля. Таким образом, результат 0.333... здесь округлен в меньшую сторону до 0. (Обратите внимание, что процессор на самом деле не выполняет никакого округления, но вы все равно можете думать об этом таким образом.)

Также обратите внимание, что если оба операнда (числа) заданы в виде чисел с плавающей запятой; 3.0 и 1.0 или даже только первый, то используется арифметика с плавающей запятой, что дает вам 0.333....

Ответ 2

1/3 использует целочисленное деление, поскольку обе стороны являются целыми числами.

Вам нужно, чтобы хотя бы одно из них было float или double.

Если вы вводите значения в исходном коде, как в вашем вопросе, вы можете сделать 1.0/3 ; 1.0 это double .

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

int x = ...;
int y = ...;
double value = ((double) x) / y;
Ответ 3

Явно приведите это как double

double g = 1.0/3.0

Это происходит потому, что Java использует операцию целочисленного деления для 1 и 3, поскольку вы ввели их как целочисленные константы.

Ответ 4

Потому что вы выполняете целочисленное деление.

Как говорит @Noldorin, если оба оператора являются целыми числами, то используется целочисленное деление.

Результат 0.333333333 не может быть представлен в виде целого числа, поэтому результату присваивается только целочисленная часть (0).

Если какой-либо из операторов является double / float , то будет выполняться арифметика с плавающей запятой. Но у вас будет та же проблема, если вы сделаете это:

int n = 1.0 / 3.0;
java