Разный результат приоритета операторов в Java и Python

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

10 / 3 + 2 * 4 / 3 - 3

результат в Java = 2,0
в питоне = 3,0

Я также выполняю эту операцию во многих калькуляторах, и в результате 3.0 может кто-нибудь объяснить, как Java справиться с этим?

double var = 10/3+2*4/3-3;
System.out.println(var);

3 ответа

Решение

Компоненты выражения будут оцениваться как целые числа, т.е. промежуточные значения усекаются (10/3 оценивает 3, 2*4/3 оценивает 2 и так далее).

Переключение на приведенное ниже приведет к 3.0:

double var = 10.0 / 3.0 + 2.0 * 4.0 / 3.0 - 3.0;

В яве:

10 / 3 + 2 * 4 / 3 - 3
(10 / 3) + (2 * (4 / 3))) - 3
3 + (2 * 1) - 3
3 + 2 - 3
2

Все приведено к int, поэтому он дает этот результат.

Java следует другому порядку или операторам, чем python:

Java: PMDRAS - скобки, умножение, деление, остаток, сложение, вычитание.

Python: PEMDAS - скобка, показатель степени, умножение, деление, сложение, вычитание.

Другие вопросы по тегам