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


Convert a big integer to a full string in PHP

我已经搜索了一段时间,但我能找到的不是我所搜索的。我需要将一个整数值(可能是非常大的)转换为字符串。听起来很简单:"$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

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

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

您的替代方案是将其存储为浮点值,并始终考虑到这一点,尽管这需要额外的转换和就地处理。

也有人建议使用GNU Multiple Precision,但在PHP中默认情况下没有启用。

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

更新:找到下一篇文章:

// 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

我在获取facebookid并在MySQL中找到它时遇到了这个问题。半个小时后,我完美地找到了这件作品!在php脚本中插入此行:

ini_set('precision',30);

发件人:https://forums.phpfreaks.com/topic/125907-solved-convert-big-number-to-string/#entry651084

您想要表示的整数:

$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手册会告诉你整数限制,关于浮点精度的浮动页面(请参阅红色大警告)。根据您所在的系统,您可以根据应用程序需要的范围编译PHP,也可以使用其他数据类型,例如gmp库,它可以将字符串作为整数进行选择并处理。

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

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

希望这会有所帮助。