我已经搜索了一段时间,但我能找到的不是我所搜索的。我需要将一个整数值(可能是非常大的)转换为字符串。听起来很简单:"$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
使用printf
或sprintf
。
我在获取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);
希望这会有所帮助。