我希望能够将大整型转换为其完整的字符串导数。
例如。
$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"