【问题标题】:Using long int in PHP在 PHP 中使用 long int
【发布时间】:2012-01-28 15:32:25
【问题描述】:

我正在尝试,但无法存储大额价值

$var = rand(100000000000000,999999999999999);
echo $var; // prints a 9 digit value(largest possible)

如何得到想要的值?

【问题讨论】:

    标签: php int unsigned-long-long-int


    【解决方案1】:

    来自manual

    整数的大小取决于平台,尽管通常值约为 20 亿的最大值(即 32 位有符号)。 64 位平台的最大值通常约为 9E18。 PHP 不支持无符号整数。自 PHP 4.4.0 和 PHP 5.0.5 起,可以使用常量 PHP_INT_SIZE 确定整数大小,使用常量 PHP_INT_MAX 确定最大值。

    ...

    如果 PHP 遇到超出整数类型范围的数字,它将被解释为浮点数。此外,导致数字超出整数类型范围的操作将改为返回浮点数。

    BC MathGMP 是(唯一?)操纵此限制的方法。

    【讨论】:

      【解决方案2】:

      PHP 整数通常为 32 位。其他包提供更高精度的整数:http://php.net/manual/en/language.types.integer.php

      【讨论】:

        【解决方案3】:

        如果您需要处理非常大的数字,我发现使用 BC Math 取得了成功。这是您需要了解的所有内容的链接:

        http://php.net/manual/en/book.bc.php

        【讨论】:

          【解决方案4】:

          如果您想生成数字并将其作为本机类型进行操作,您不能使用大多数 PHP 安装(您有 32 位或 64 位 ints,没有其他),正如其他答案已经说明的那样。但是,如果您只是生成一个数字并想要传递它,那么一个可能的技巧就是连接字符串:

          $var = rand(0,PHP_INT_MAX).str_pad(rand(0, 999999999), 9, 0, STR_PAD_LEFT);
          echo $var;
          

          在 PHP 使用 32 位整数的平台上,这允许您获得大于 32 位(> 10 个小数位)的近似随机整数(作为字符串)。当然,这种结构存在偏差,这意味着您不会以相同的概率覆盖所有数字。 rand() 调用的限制遵循正常的十进制规则,因此可以轻松调整所需数字的上限。

          如果您所做的只是存储/传输/显示此值,则字符串会很好。平等和大于/小于测试也将起作用。只是不要用它做任何数学运算。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-05-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-12-16
            • 2010-12-22
            相关资源
            最近更新 更多