Разный результат приоритета операторов в 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 - скобка, показатель степени, умножение, деление, сложение, вычитание.