在 php 中将长度超过 16 位的 int 转换为字符串


Converting an int that is more than 16 digits long into a string in php

是否有任何函数可以轻松回显长度为 15+ 位的整数?我管理的唯一方法是这样的:

$num = 123456789012345;
$num = number_format($num);
$num = str_replace(',', '', $num);
echo $num; 

但即使这样,它也只能精确到 17 位数字。在第 16 位数字之后,数字打印不准确(因为作为浮点数,它开始变得不准确 - 见这里(。

编辑:从下面的答案中,我写了ini_set('precision',40);,然后直接$num回声。简单地说,所有这些都是为了不显示浮点数中的小数点。在第 16 位数字之后,它再次开始变得不准确。 我还尝试了另一个建议,即将它更改为数组,然后用str_split($num);迭代它,从第 17 位开始,数字再次不准确!

最简单的解决方案是将整数转换为字符串。我试过:

$num = (string)$num; 
//and
$num = strval($num);

但是两者都没有改变任何东西,他们表现得好像他们仍然是一个 int??

我的问题是为什么转换为字符串不起作用。有没有办法将数字变成字符串?谢谢

我能想到的唯一解决方案是更改 php 中浮点数的精度.ini

ini_set('precision', 25);

我不知道你从哪里得到这些大数字,但我建议你也看看 bc 函数!

我想到的最后一件事是使用 explode 函数将字符串拆分为一个数组并对其进行交互。

编辑:当所有建议都失败时,您唯一的选择是查看BC Math和/或GMP函数以及MoneyMath。BigInteger包也应该可以解决问题,它使用GMP和BC。

嗯,你看,它不是你声称的"int":)

echo PHP_INT_MAX; // echoes 9223372036854775807
$n = 9223372036854775807;
echo $n; // echoes 9223372036854775807
$n = 9223372036854775808; 
echo $n; // echoes 9.2233720368548E+18

正如曼尼所说,将precision设置为更伟大的东西可以解决问题。

ini_set("precision", 50);
$n = 9223372036854775808; 
echo $n; // echoes 9223372036854775808