"608E-4234"
is the float number format, so they will cast into number when they compares.
608E-4234
and 272E-3063
will both be float(0)
because they are too small.
For ==
in php,
If you compare a number with a string or the comparison involves numerical strings, then each string is converted to a number and the comparison performed numerically.
http://php.net/manual/en/language.operators.comparison.php
Attention:
What about the behavior in javascript which also has both ==
and ===
?
The answer is the behavior is different from PHP. In javascript, if you compare two value with same type, ==
is just same as ===
, so type cast won't happen for compare with two same type values.
In 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)
So in javascript, when you know the type of the result, you could use ==
instead of ===
to save one character.
For example, typeof
operator always returns a string, so you could just use
typeof foo == 'string'
instead of typeof foo === 'string'
with no harm.
PHP uses IEEE 754 for floats, and your numbers are so small that they evalue to 0.
See: 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
I think that PHP reads this as a scientific syntax, which will be translated as:
608 x 10^-4234 == 272 x 10^-3063
PHP interprets this as being 0 = 0
.
PHP is comparing those strings as floating point numbers, and they both are zero, so you MUST use the ===
operator,
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With