Возможный дубликат:
Оператор php == vs ===
Как различаются операторы сравнения равенства (== double equals) и идентичности (=== triple equals)?
Почему следующий оператор возвращает true ?
"608E-4234" == "272E-3063"
Я также пробовал это с одинарными кавычками вокруг строк. Единственный способ, которым я могу заставить его убедить в false – это использовать оператор === вместо ==
Я предполагаю, что PHP относится к нему как к некоторому уравнению, но кажется немного странным.
Может ли кто-нибудь уточнить?
"608E-4234" – это формат чисел с плавающей запятой , поэтому они сравниваются с числом.
608E-4234 и 272E-3063 будут float(0) потому что они слишком малы.
Для == в php,
Если вы сравниваете число со строкой или сравниваете числовые строки , то каждая строка преобразуется в число, а сравнение выполняется численно.
http://php.net/manual/en/language.operators.comparison.php
Внимание:
Как насчет поведения в javascript, который также имеет и == и === ?
Ответ в том, что поведение отличается от PHP. В javascript, если вы сравниваете два значения с одним типом, == точно так же, как === , поэтому тип cast не будет использоваться для сравнения с двумя значениями одного типа.
В javascript:
608E-4234 == 272E-3063 // true 608E-4234 == "272E-3063" // true "608E-4234" == 272E-3063 // true "608E-4234" == "272E-3063" // false (Note: this is different form PHP)
Поэтому в javascript, когда вы знаете тип результата, вы можете использовать == вместо === для сохранения одного символа.
Например, оператор typeof всегда возвращает строку, поэтому вы можете просто использовать
typeof foo == 'string' вместо typeof foo === 'string' без вреда.
PHP использует IEEE 754 для поплавков, и ваши номера настолько малы, что они имеют значение 0.
См .: http://en.wikipedia.org/wiki/IEEE_floating_point
Name Common name Base Digits E min E max binary32 Single precision 2 23+1 −126 +127 binary64 Double precision 2 52+1 −1022 +1023
Я думаю, что PHP читает это как научный синтаксис, который будет переведен как:
608 x 10^-4234 == 272 x 10^-3063
PHP интерпретирует это как 0 = 0 .
PHP сравнивает эти строки как числа с плавающей запятой, и оба они равны нулю, поэтому вы ДОЛЖНЫ использовать оператор === ,
Я пытаюсь ответить. Если вы используете «===», вы также проверяете тип вместо значения. Если вы используете «==», вы просто проверяете, что это то же самое или нет.
вы можете ссылаться здесь и здесь .
Это то, что он видит:
http://www.wolframalpha.com/input/?i=608E-4234&dataset=
http://www.wolframalpha.com/input/?i=272E-3063
Поскольку они не вписываются в переменную, они оба равны 0 или любое другое значение по умолчанию, которое выбирает php, и поэтому эквивалентны.