You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何字符串"8000423E-1670872784"与"8000427E-1689194367"==比较返回true?

关于PHP字符串比较的疑问解答

先看测试代码:

php > var_dump("8000423E-1670872784" == "8000427E-1689194367");
bool(true)
php > var_dump("8000423E-1670872784" === "8000427E-1689194367");
bool(false)
php > var_dump("8000423A-1670872784" == "8000427A-1689194367");
bool(false)

第一个比较返回true的原因

PHP的==是松散类型比较,当检测到两个字符串符合科学计数法的数字格式时,会自动将它们转换成浮点数再对比。
这两个字符串的指数部分都是极小的负数(-1670872784、-1689194367),远超浮点数能精确表示的范围,转换后都会下溢为0,所以0和0比较结果为true。

而===是严格比较,会同时校验值和类型,这两个字符串本身内容不同,因此返回false。

第一个比较和第三个比较的区别

第三个比较里的字符串包含字母A,不符合科学计数法的格式(科学计数法的指数标识只能是E或e),PHP不会将它们转换成数字,而是直接做字符串的松散对比——两个字符串内容明显不同,所以返回false。

内容的提问来源于stack exchange,提问作者aswine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 08:29:49