【发布时间】:2016-11-07 17:20:48
【问题描述】:
我只是想知道为什么在使用科学计数法时没有输入我的 if 语句,即 1e2 而不是 100 和 1e6 而不是 1000000。
事实证明,它们只是相等而不相同,如下代码所示:
<?php
echo "Integer: " . 100; // prints 100
echo "\n";
echo "Scientific notation: " . 1e2; // prints 100
echo "\n";
echo "Equality: ";
if(100 == 1e2) {
echo "as expected";
} else {
echo "wtf php";
}
// prints "Equality: as expected"
echo "\n";
echo "Identity: ";
if(100 === 1e2) {
echo "as expected";
} else {
echo "wtf php";
}
// prints "Identity: wtf php"
我有run it on different php versions,它似乎至少是一致的,因为这种行为在以下方面是相同的:4.3.0 - 5.0.5、5.1.1 - 5.6.27、hhvm-3.10.0 - 3.13.2 , 7.0.0 - 7.1.0RC5。
然而:为什么!?
【问题讨论】:
-
因为科学记数法在php中是浮动类型,不是整数类型。
-
是的,=== 检查相同的值和相同的类型。 1e2 是双精度数,100 是整数,所以它们不是同一类型。
标签: php integer identity equality scientific-notation