PHP5.x 强制转换 (int)'1e5' 和 PHP7.x 强制转换 (int)'1e5' 为何两者结果不同?

PHP5.x 强制转换 (int)'1e5' 和 PHP7.x 强制转换 (int)'1e5' 为何两者结果不同?

# PHP5.x
var_dump((int)'1e5');   #输出结果 1
# PHP7.x
var_dump((int)'1e5');   #输出结果 100000

因为环境不一样..

因为php7的底层里,把1e5 ,2e6,这样的字符格式,用int里他会把这个e解析是0,后面如果是跟数字的话,就表示几个0,如果跟的非数字,那就是没有0,如果你缓存别的字母,就和之前的一样了

echo '1a5转成数字:';
echo (int)'1a5';
echo '<br>';
echo '1b5转成数字:';
echo (int)'1b5';
echo '<br>';
echo '1c5转成数字:';
echo (int)'1c5';
echo '<br>';
echo '1d5转成数字:';
echo (int)'1d5';
echo '<br>';
echo '1e5转成数字:';
echo (int)'1e5';
echo '<br>';
echo '1e4转成数字:';
echo (int)'1e4';
echo '<br>';
echo '1e3转成数字:';
echo (int)'1e3';
echo '<br>';
echo '1f5转成数字:';
echo (int)'1f5';
echo '<br>';
echo '1g5转成数字:';
echo (int)'1g5';
echo '<br>';
echo '1h5转成数字:';
echo (int)'1h5';

php里将1e5解释为1*10的五次方,如果为字符串,也可以用==和100000比较,并且结果是相等的,5.x结果也是相等,但是5.x经过强制转换的话无法识别,只要不经过强制转换是会把它当做100000的,除非用===判断,严格区分类型