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

Nik*_*s R 7 php integer casting type-conversion

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

<?php

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

?>
Run Code Online (Sandbox Code Playgroud)

1.0E+25
'1.0E+25'
1.0E+25
1.0E+25
Run Code Online (Sandbox Code Playgroud)

我怎样才能改变输出10000000000000000000000000

kin*_*ple 8

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

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

您可以选择将其存储为浮动并始终将其考虑在内,但这需要额外的转换和处理.

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

$int=gmp_init("10000000000000000000000000");
$string=gmp_strval($int);
echo $string;
Run Code Online (Sandbox Code Playgroud)


Ofi*_*uch 5

更新: 找到下一篇文章:

// 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
Run Code Online (Sandbox Code Playgroud)

使用printfsprintf.