我一直在寻找一段时间,但我能找到的不是我搜索的内容。我需要将一个整数值(可能是非常大的)转换为字符串。听起来很简单:"$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
?
答案 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
使用printf
或sprintf
。
答案 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