【问题标题】:mt_rand expects parameter 2 to be integer, wrongly thinks float was givenmt_rand 期望参数 2 为整数,错误地认为给定了 float
【发布时间】:2016-02-19 23:05:54
【问题描述】:
mt_rand(1000000000, 9999999999);

警告:mt_rand() 期望参数 2 为整数,浮点数在第 6 行的 E:\Projects\school\users\temp.php 中给出

XAMPP 中的 PHP 7.0.2。此代码在具有 5.x 的上次 XAMPP 安装中运行良好。所以更新打破了它。在谷歌上找不到任何东西。

【问题讨论】:

  • 似乎工作正常:3v4l.org/5SjLL
  • 这很奇怪,我面前加载的页面有错误。好奇。
  • 任何超过 2147483647 的东西都会在 32 位系统上自动浮动。查看Interger overflow
  • 我似乎无法强制 PHP 7.0.2 创建此警告:error_reporting(E_ALL); var_dump(mt_rand(1.5, 2.5));
  • 32 位 PHP 与 64 位 PHP

标签: php xampp


【解决方案1】:

如果大整数超出服务器操作系统上的最大整数值,它们将被存储为浮点数。在 32 位系统上,它们在 2147483647 以上溢出。在 64 位系统上,它们在 9223372036854775807 以上溢出。

如果您想查看服务器上的最大 int,可以使用 var_dump(PHP_INT_MAX)。

如果你想确保无论它在哪个系统上运行都不会溢出,你可以使用 mt_getrandmax() 作为你的第二个参数

mt_rand(1000000000, mt_getrandmax())

【讨论】:

  • 其实我刚查了一下php的老版本也是x86的。新的也是如此。两者都有 PHP_INT_MAX 的 214783647。所以唯一改变的是 php 版本。该代码在旧版本中运行良好。我也不记得更改任何 php.ini 设置。
【解决方案2】:

将参数 2 更改为整数。

mt_rand(1000000000, 8888888888);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-15
    • 2017-09-25
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    相关资源
    最近更新 更多