Intereting Posts
Смит-Уотерман для строки в PHP? Xamarin / PHP, я хочу сделать мой Jarray в JObject, либо в C # (Xamarin), либо в моем PHP-коде сделать выполнение скрипта неограниченным Ajax не работает над тегом select, PHP, AJAX Динамически изменять значения ассоциативного массива в php if ($ _ FILES ! = "") запускается, если файлы, не запускаются, если нет головной боли в файлах Прочитать один столбец из одной строки из базы данных MySQL Унаследованные атрибуты Laravel 4 равны нулю Zend_Session / Zend_Auth случайно генерирует сообщение об ошибке ps_files_cleanup_dir: opendir (/ var / lib / php5) не удалось: разрешение отклонено (13) как сделать bbcode для анализа URL-адресов в ссылках? Где получить доступ к API Google Analytics access_token? имея http ссылки на странице https, но не скрипты или css Laravel 5.1 – HHVM – исключение S3 в WrappedHttpHandler.php строка 152 Символы на строку и строки в текстовом поле Проверьте, существует ли файл на удаленной машине

PHP выражает две разные строки одинаковыми

Возможный дубликат:
Оператор 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, и поэтому эквивалентны.