在PHP中将大整数转换为完整字符串

时间:2012-03-08 17:09:54

标签: php casting integer type-conversion

我一直在寻找一段时间,但我能找到的不是我搜索的内容。我需要将一个整数值(可能是非常大的)转换为字符串。听起来很简单:"$var"?不,因为这可能导致数字的E+表示。

<?php

$var = 10000000000000000000000000;
echo $var."\n";
echo "'$var'\n";
echo (string) $var."\n";
echo strval($var);

?>

1.0E+25
'1.0E+25'
1.0E+25
1.0E+25

如何将输出改为10000000000000000000000000

4 个答案:

答案 0 :(得分:8)

这不是由PHP存储为整数,而是浮点数,这就是为什么你最终得到的是1.0E + 25而不是10000000000000000000000000。

遗憾的是,在PHP中将其用作整数值是不可能的,因为PHP无法保存该大小的整数。如果这来自数据库,那么它将是一个字符串,您可以随心所欲地使用它。如果将其存储在其他位置,则将其存储为字符串。

您的替代方案是将其存储为浮动并始终将其考虑在内,但这需要额外的转换和处理。

还建议使用GNU Multiple Precision,但默认情况下不会在PHP中启用。

$int=gmp_init("10000000000000000000000000");
$string=gmp_strval($int);
echo $string;

答案 1 :(得分:3)

<强>更新 找到下一篇文章:

// strval() will lose digits around pow(2,45);
echo pow(2,50); // 1.1258999068426E+015
echo (string)pow(2,50); // 1.1258999068426E+015
echo strval(pow(2,50)); // 1.1258999068426E+015

// full conversion
printf('%0.0f',pow(2,50)); // 112589906846624
echo sprintf('%0.0f',pow(2,50)); // 112589906846624

使用printfsprintf

答案 2 :(得分:2)

您想表达的整数:

$var = 10000000000000000000000000;

在您的系统上不可用。它太大了,因此PHP将其转换为一个将改变数字的浮点数(32位系统示例):

       10000000000000000905969664

共同限制是:

 yours :  10 000 000 000 000 000 000 000 000
 32 bit:                       2 147 483 648
 64 bit:           9 223 372 036 854 775 808

值的更改称为浮点精度,PHP manual about integers将告诉您整数限制和the floats page about floating point precision(请参阅大红色警告)。根据您所使用的系统,您可以使用应用程序所需的范围编译PHP,或者必须使用其他数据类型,例如使用the gmp library能够选择字符串作为整数并处理它们。

以下示例仅显示输出,但您可以执行乘法等。:

$r = gmp_init('10000000000000000000000000');
echo gmp_strval($r);

希望这有用。

答案 3 :(得分:2)

我在获取facebook id并在MySQL中找到它时遇到了这个问题。 半小时后,我发现这项工作完美无缺! 将此行插入您的PHP脚本:

ini_set('precision',30);

来自:https://forums.phpfreaks.com/topic/125907-solved-convert-big-number-to-string/#entry651084