为什么 PHP 将带有字母 E 的字符串转换为数字?
2022-08-30 07:28:56
为什么以下语句返回?true
"608E-4234" == "272E-3063"
我也尝试过用字符串周围的单引号来尝试这一点。我能让它评估的唯一方法是使用运算符而不是false
===
==
我的猜测是PHP将其视为某种等式,但它似乎有点奇怪。
任何人都可以详细说明吗?
为什么以下语句返回?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中,如果您比较两个具有相同类型的值,则与 相同,因此与两个相同类型值进行比较时不会发生类型转换。==
===
在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中,当你知道结果的类型时,你可以使用而不是保存一个字符。==
===
例如,operator 总是返回一个字符串,因此您可以使用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