@stan288

Почему неправильно выполняется сравнение чисел?

(604.5< -597.5 <512.5)

Возращает true

А вот 604.5<-597.5 && -597.5<512.5 false

Почему такое странное поведение? Почему в первом выражении вернуло true?
  • Вопрос задан
  • 93 просмотра
Решения вопроса 2
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Ну если автомобиль перевернуть вверх колёсами и поставить крышей на асфальт - он тоже не будет ездить. И с чего бы это вдруг? А нас ведь всё тот же автомобиль, он обязан ехать!

Так писать операцию сравнения нельзя. А в приведённом примере JavaScript сначала вычислит результат 604.5< -597.5 - получит false, который превратит в 0, потому что дальше ещё одна арифмитическая операция сравнения 0 < 512.5 - вот и получилось true. А второй пример написан правильно - и результат правильный.

P.S. Это не язык программирования выдаёт какую-то ошибочную дичь, нет. Это вы должны подстраивать свои хотелки под правила и логику языка программирования.
Ответ написан
Комментировать
delphinpro
@delphinpro Куратор тега JavaScript
frontend developer
в javascript не предусмотрена такая запись сравнения. В сравнении участвую только два операнда. В первом случае у нас две операции сравнения и они будут выполнены в порядке очередности. То есть скобки будут такие (604.5 < -597.5) < 512.5

604.5 < -597.5 < 512.5
(604.5 < -597.5) < 512.5
false < 512.5 // тут приведение типа bool к int
0 < 512.5
true


Во втором случае приоритет операторов немного иной. Сначала выполняются сравнения, потом логическое И.
604.5 < -597.5 && -597.5 < 512.5
(604.5 < -597.5) && (-597.5 < 512.5)
false && true
false


Вам нужно освежить знания по темам: операции сравнения, логические операции, неявное приведение типов, приоритет операторов.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@YK21
false это ноль
тема - приведение типов в javascript
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы