PHP:如何将bigint从int转换为string?

bug*_*com 12 php string biginteger

我希望能够将大的int转换为完整的字符串派生词.

例如.

$bigint = 9999999999999999999;
$bigint_string = (string) $bigint;
var_dump($bigint_string);
Run Code Online (Sandbox Code Playgroud)

输出

string(7) "1.0e+19"
Run Code Online (Sandbox Code Playgroud)

但是我需要

string(19) "9999999999999999999"
Run Code Online (Sandbox Code Playgroud)

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

hak*_*kre 13

你实际应该确保键入你的意思:

$bigint = 9999999999999999999;
Run Code Online (Sandbox Code Playgroud)

不是PHP整数而是浮点数:

float(1.0E+19)
Run Code Online (Sandbox Code Playgroud)

如果你愿意的话

$bigint = (int) 9999999999999999999;
Run Code Online (Sandbox Code Playgroud)

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

int(-8446744073709551616)
Run Code Online (Sandbox Code Playgroud)

你可能已经猜到了把它变成字符串完全没问题.因此,当你在代码中写入数字时要小心,你实际上写的是你的意思.

再次看到这一行:

$bigint = 9999999999999999999;
Run Code Online (Sandbox Code Playgroud)

试着了解你实际写的是什么.它根本不是一个整数,因为PHP会把它变成一个浮点数.请参见示例#4 整数手册页中 64位系统上的整数溢出.

如果你需要更高的精度,请查看GNU Multiple Precision,它可能有你想要的东西.但是,这不会改变如何在PHP中编写数字:

$bigint = gmp_init("9999999999999999999");
$bigint_string = gmp_strval($bigint);
var_dump($bigint, $bigint_string);
Run Code Online (Sandbox Code Playgroud)

输出:

resource(4) of type (GMP integer)
string(19) "9999999999999999999"
Run Code Online (Sandbox Code Playgroud)

  • 感谢hakre的深入回应.我想我还有更多需要学习的东西. (3认同)