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

时间:2011-08-22 17:35:00

标签: php string biginteger

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

例如。

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

输出

string(7) "1.0e+19"

但我需要

string(19) "9999999999999999999"

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

4 个答案:

答案 0 :(得分:13)

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

$bigint = 9999999999999999999;

不是PHP整数而是浮动:

float(1.0E+19)

如果你愿意的话

$bigint = (int) 9999999999999999999;

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

int(-8446744073709551616)

根据您的猜测,把它变成字符串完全没问题。所以当你在代码中写入数字时要小心,你实际上写的是你的意思。

再次见到这一行:

$bigint = 9999999999999999999;

尝试了解您实际写的内容。它根本不是一个整数,因为PHP会把它变成一个浮点数。请参见示例#4 integer manual page中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"

答案 1 :(得分:4)

使用strval()

echo strval($bigint); // Will output "99999999999999999"
编辑:经过稍微好一点的研究(> 5000ms)后,我发现不可能将数字回显到那个精度,因为PHP无法保存该大小的整数(取决于OS位系统,32/64)。似乎在不失去精确度的情况下不可能做到这一点。

答案 2 :(得分:0)

使用printf(),这是为了:

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

答案 3 :(得分:0)

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

   $bigint = '9999999999999999999';

    var_dump($bigint);

输出:

string(19) "9999999999999999999"