PHP中比较两个不同字符串返回true的异常行为原因咨询
问题原因
这是PHP中**松散相等比较(==)**的自动类型转换规则导致的现象:
- 当使用
==比较两个格式符合科学计数法的字符串时,PHP会默认先将两个字符串转换为浮点数,再比较数值结果,而非直接对比字符串字面内容。 - 你用到的两个字符串
'115e-401'、'115e-402'均为科学计数法格式的数值字符串,换算为十进制数值分别为1.15×10^-399和1.15×10^-400。 - PHP采用IEEE 754双精度标准存储浮点数,该标准可支持的最小正浮点数约为
2.2×10^-308,上述两个数值都远小于该阈值,转换浮点数时会因为精度下溢直接被截断为0.0,两个0.0比较自然返回true。
修复方案
如果需要严格对比两个字符串的字面内容,请使用全等比较符===,该运算符不会触发自动类型转换,会同时校验变量的类型和值:
dd('115e-401' === '115e-402'); // 返回预期的false
现象截图

内容的提问来源于stack exchange,提问作者Davit Zeynalyan
相关产品推荐
相关产品推荐

