对不起,我不知道怎么称呼这个。为什么PHP认为大型整数是浮动的(但只是有时)?
echo rand(0,10e20) . "\n"; // bad
echo rand(0,10e19) . "\n"; // bad
echo rand(0,10e18) . "\n"; // bad
echo rand(0,10e17) . "\n"; // OK
echo rand(0,10e16) . "\n";
echo rand(0,10e15) . "\n\n";
var_dump(10e20); // float
var_dump(10e15); // float
输出:
警告:兰特()预计参数2为整数,浮点数给出/srv/webroot-sandbox/index.php(73 ):EVAL()倒是线代码1
警告:兰特()预计参数2为整数,浮点数给出/srv/webroot-sandbox/index.php(73 ):EVAL()'d代码第2行
警告:rand()需要参数2将整数,浮点数给出 在/srv/webroot-sandbox/index.php(73):的eval()'d码3
578009006101638016
69608699344098568
7596902768127620
float(1.0E+21)
float(1.0E+16)
线有人能解释这是怎么回事?这是PHP 7,它在PHP 5中运行正常(至少,我没有得到任何警告)。
仍然在搜索,但可能是它超过了整数的大小... – FirstOne
嗯也许它试图施展和失败在一定的规模?但有趣的是,根据手册,它在PHP 5 – MightyPork
中运行正常:http://php.net/manual/en/language.types.integer.php一旦超出限制,就会出错。这是特定于php7。 – durbnpoisn