Possible Duplicate:
php == vs === operator
How do the equality (== double equals) and identity (=== triple equals) comparison operators differ?
为什么下面的语句返回true?
1
| "608E-4234" =="272E-3063" |
我也尝试过用单引号括住字符串。我唯一能得到它的方法是使用===操作符而不是==操作符。
我猜是PHP把它当作某种等式,但它看起来有点奇怪。
有人能详细解释一下吗?
- 608e -回声的回声4234 = 0;272e 3063 = 0 - 0 = = 0;
- 这并不php.net / strcmp醉?
- PHP是弱/强类型连。取决于语境的,什么是声称是一个4点别的,在事实。所以,如果你想更好的使用===比较字符串。知道你的操作。
- bokw:codepad.org / x8moswux @
- strcmp存在非常为这个原因,在其他。
- 这将是有趣的知道,这是第一次当你encountered假定的问题。
- 我假定它是以@ hakra subtraction的hyphen作为一个标志。我的大修理后重新编辑你的坏的语法.)
- 实际上,这个问题是不充分duplicated,它不是问题的weakly/loosely typed只是关于PHP的行为,但会将==弦乐的数值个数相比与==,即使他们是两个字符串。这种行为是不同的从JavaScript,这也有==和===。
"608E-4234"是浮点数格式,因此它们在比较时会转换成数字。
608E-4234和272E-3063都将是float(0)因为它们太小。
对于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
注意:
在同时拥有==和===的javascript中的行为如何?
答案是行为不同于PHP。在javascript中,如果将两个值与同一类型进行比较,则==与===相同,因此与两个相同类型的值进行比较时不会发生类型转换。
在JavaScript中:
1 2 3 4
| 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运算符总是返回一个字符串,因此您只需使用
以东十一〔12〕而不是以东十一〔13〕无害。
- 国有企业也phpsadness.com /伤心/:47
- Numerical Strings>是。它甚至不是使它难写在PHP应用程序的安全。
- phresnel"不是真的。使用===自学PHP,这应该是在101"是比较这些值。它的唯一的人是来自confusing没有模糊语言比较,C和Java的类。
- "lzkata:那是肯定的,但我也不会有那一个字符串比较时,将可能发生的literals,这样的事情。在其他的话:我也不会有预期的,那是当我比较两operands精确的相同的类型,有一个需要的===算子。当然,它的文档mentions DOC,但也很是模糊的,模糊的。
- ucch。这是一个disgusting语言的变化。
- 测试浮标的是平等的吗?我认为好的消化不良。
- "phresnel检查JavaScript’s = =,这是不同的从PHP的。所以我认为这是不正常的行为在PHP知识:)
- 重要的是,从运营商位比较手册:如果你的号码与比较字符串比较字符串或字符串,包括数字转换,然后每一numerically和执行数比较。
PHP使用IEEE754作为浮点数,您的数字太小,以至于它们的值为0。
参见:http://en.wikipedia.org/wiki/ieee_floating_point
1 2 3
| 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
- PHP是一jalf loosely型",是背后的场景的转换值,如果你是一个邪恶的=不熟悉的语言,如果他想把他需要的字符串比较使用strcmp =或人已经提到的。
- 是的,但我stoj点",这个答案是不回答的问题:它的表示使用的FP介绍PHP的,但它并不重要的状态,事实上如果你像FP值的字符串,它会转换成一个FP值"。
我认为PHP将此理解为一种科学的语法,它将被翻译为:
1
| 608 x 10^-4234 == 272 x 10^-3063 |
php将其解释为0 = 0。
php将这些字符串作为浮点数进行比较,它们都为零,因此必须使用===运算符,
- 我说在我的答案,这是因为在这两个字符串进行比较的浮点数是零,这是圆形,因此他们再等,但不相同的
我在试着回答。如果使用"==",还可以检查类型而不是值。如果使用"==",只需检查值是否相同。
你可以在这里和这里引用。
这就是它所看到的:http://www.wolframalpha.com/input/?I=608E-4234&数据集=http://www.wolframalpha.com/input/?I=27 2E-3063
因为它们不适合变量,所以它们都等于0,或者PHP选择的任何默认值,因此是等效的。