Запутывающий приоритет оператора 2/5 * 3 в переполнении стека

Как показывает руководство PHP, следующие операторы имеют одинаковый приоритет (левая ассоциативность):

* / %

Итак, это значит:

echo 2 / 5 * 3

должен отображать 7,5! потому что умножение будет выполнено первым, 5 * 3 = 15 тогда частное будет разделено на 2.

Но когда я запускаю этот код, PHP-код выводит 1.2!

Может ли кто-нибудь, пожалуйста, понять, что происходит?

1

Решение

Есть порядок выполнения арифметических операций. который называют коротким PEMDAS

  1. () — скобки
  2. / — отклонение
  3. * — умножение
  4. + — добавлять
  5. - — мин

Это будет(2 / 5 * 3) выполнять в выше порядок


Так что здесь происходит 2 / 5 * 3

  1. 2/5 знак равно 0,4
  2. 0.4*3 знак равно 1.2

Чтобы выполнить ваше требование

  1. 5 * 3 знак равно 15
  2. 15 / 2 знак равно 7,5

Так что вы должны сделать (5 * 3) / 2 или же 2 / (5 * 3)


Предварительный просмотр PHPFiddle

1

Другие решения

Тот же приоритет означает, что все будет происходить слева направо.

Это означает, что он не будет размножаться первым. Порядок, в котором * / % было написано в руководстве не имеет значения.

  • 2/5 = 0,4
  • 0,4 * 3 = 1,2

Кроме того, по вашей логике вы должны получать 1. (3), но это не главное.

3

Это слева направо
2/5 = 0,4
0,4 * 3 = 1,2

0

Как вы можете видеть здесь: http://php.net/manual/en/language.operators.precedence.php

оператор * / и% имеют одинаковый приоритет. * имеет тот же приоритет, что и /.

0
По вопросам рекламы [email protected]