为什么科学记数法与php中的整数不同?

Why is scientific notation not identical to integer in php?

提问人:k0pernikus 提问时间:11/8/2016 更新时间:11/8/2016 访问量:138

问:

我只是想知道为什么在使用科学记数法时没有输入我的 if 语句,即 而不是 和 代替 .1e21001e61000000

事实证明,它们只是相等而不完全相同,如以下代码所示:

<?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"

我已经在不同的 php 版本上运行了它,它似乎至少是一致的,因为这种行为是相同的: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 恒等式 科学记数法

评论

3赞 Eli Sadoff 11/8/2016
因为科学记数法是 php 中的浮点类型,而不是整数类型。
1赞 Jordan D 11/8/2016
stackoverflow.com/questions/80646/......
1赞 Ben Guest 11/8/2016
是的,=== 检查相同的值和相同的类型。1e2 是双精度,100 是整数,因此它们不是同一类型。

答:

1赞 malukenho 11/8/2016 #1

===运算符,在 PHP 中,考虑操作数的类型。 even 返回一个数字,并且是一个整数。 因此,它在值 () 上相等,但在类型 () 上不相等。1e2float100=====