首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP将两个不同的字符串表示为相同

PHP将两个不同的字符串表示为相同
EN

Stack Overflow用户
提问于 2012-09-26 17:17:57
回答 6查看 6.1K关注 0票数 104

可能重复:

php == vs === operator

How do the equality (== double equals) and identity (=== triple equals) comparison operators differ?

为什么下面的语句返回true

代码语言:javascript
复制
"608E-4234" == "272E-3063"

我也尝试过在字符串两边加上单引号。我能让它求值到false的唯一方法是使用===运算符,而不是==

我的猜测是PHP将其视为某种方程,但它似乎有点奇怪。

有谁能详细说明一下吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-09-26 17:22:39

"608E-4234"是数字,因此它们在比较时会转换为float number format

608E-4234272E-3063都将是float(0),因为它们太小了。

对于php中的==

如果将数字与字符串进行比较,或者比较涉及数字字符串,则每个字符串都将转换为数字,并以数字形式执行比较。

http://php.net/manual/en/language.operators.comparison.php

注意:

在同时具有== ===__和 javascript的javascript中,的行为如何?

答案是它的行为不同于PHP。在javascript中,如果您比较两个具有相同类型值,则=====相同,因此与两个相同类型值的比较不会发生类型转换。

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',不会有任何危害。

票数 109
EN

Stack Overflow用户

发布于 2012-09-26 17:24:28

PHP使用IEEE754表示浮点数,而您的数字太小了,以至于它们的evalue为0。

请参阅:http://en.wikipedia.org/wiki/IEEE_floating_point

代码语言:javascript
复制
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       
票数 20
EN

Stack Overflow用户

发布于 2012-09-26 17:24:49

我认为PHP将其理解为一种科学语法,它将被翻译为:

代码语言:javascript
复制
608 x 10^-4234 == 272 x 10^-3063 

PHP将其解释为0 = 0

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12598407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档