为什么以下语句返回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中,当你知道结果的类型时,你可以使用==
而不是===
保存一个字符。
例如,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 选择的任何默认值,因此是等价的。