可能重复:
How do the equality (== double equals) and identity (=== triple equals) comparison operators differ?
为什么下面的语句返回true
"608E-4234" == "272E-3063"
我也尝试过在字符串两边加上单引号。我能让它求值到false
的唯一方法是使用===
运算符,而不是==
我的猜测是PHP将其视为某种方程,但它似乎有点奇怪。
有谁能详细说明一下吗?
发布于 2012-09-26 17:22:39
"608E-4234"
是数字,因此它们在比较时会转换为float number format。
608E-4234
和272E-3063
都将是float(0)
,因为它们太小了。
对于php中的==
,
如果将数字与字符串进行比较,或者比较涉及数字字符串,则每个字符串都将转换为数字,并以数字形式执行比较。
http://php.net/manual/en/language.operators.comparison.php
注意:
在同时具有==
===
__和 javascript的javascript中,的行为如何?
答案是它的行为不同于PHP。在javascript中,如果您比较两个具有相同类型值,则==
与===
相同,因此与两个相同类型值的比较不会发生类型转换。
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'
,不会有任何危害。
发布于 2012-09-26 17:24:28
PHP使用IEEE754表示浮点数,而您的数字太小了,以至于它们的evalue为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
发布于 2012-09-26 17:24:49
我认为PHP将其理解为一种科学语法,它将被翻译为:
608 x 10^-4234 == 272 x 10^-3063
PHP将其解释为0 = 0
。
https://stackoverflow.com/questions/12598407
复制相似问题