如何将bigint从int型转换为string型


PHP: How to convert bigint from int to string?

我希望能够将大整型转换为其完整的字符串导数。

例如

$bigint = 9999999999999999999;
$bigint_string = (string) $bigint;
var_dump($bigint_string);

输出
string(7) "1.0e+19"

但是我需要

string(19) "9999999999999999999"

请不要告诉我,我应该最初将$bigint的值设置为字符串。这不是一个选择。我真的被困住了,不知道这是否可能?

您实际上应该确保您键入的是您的意思:

$bigint = 9999999999999999999;

不是PHP整数,而是浮点数:

float(1.0E+19)

如果你做了

$bigint = (int) 9999999999999999999;

实际上,您将设置一个整数,但它不会是您可能期望的数字:

int(-8446744073709551616)

将其转换为字符串完全没有问题,正如您可能已经猜到的那样。所以,当你把数字写进代码时,要注意你真正写的是你的意思。

再看这行:

$bigint = 9999999999999999999;
试着理解你实际写的是什么。它根本不是整数因为PHP会把它变成浮点数。参见整数手册页中的例#4 64位系统上的整数溢出。

如果您需要更高的精度,请检查GNU Multiple precision,它可能有您正在寻找的。然而,这不会改变如何在PHP中写数字:

$bigint = gmp_init("9999999999999999999");
$bigint_string = gmp_strval($bigint);
var_dump($bigint, $bigint_string);
输出:

resource(4) of type (GMP integer)
string(19) "9999999999999999999"

使用strval()

echo strval($bigint); // Will output "99999999999999999"

编辑:经过稍微更好的研究(> 5000ms),我发现不可能回显数字到那个精度,因为PHP无法保存那个大小的整数(取决于操作系统,32/64)。似乎不可能在不失去精度的情况下做到这一点。

使用printf(),这是为:

echo printf("%d", $bigint);

只需将值存储为字符串并显示…!

   $bigint = '9999999999999999999';
    var_dump($bigint);
输出:

string(19) "9999999999999999999"