在php中将超过16位数的整数转换为字符串

3

是否有一个能够轻松输出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类型一样。

我的问题是为什么转换成字符串的方法不起作用。有没有一种方法可以将数字转换为字符串?谢谢。

2个回答

2
我能想到的唯一解决方案是更改php.ini中浮点数的精度。
ini_set('precision', 25);

我不知道你从哪里得到这些大数字,但我建议你也看一下 bc 函数
我想到的最后一件事是使用 explode 函数将字符串拆分成数组并进行迭代。
编辑:当所有建议都失败时,你唯一的选择就是查看 BC Math 和/或 GMP 函数以及 MoneyMathBigInteger 包也应该可以胜任,它使用 GMP 和 BC。

谢谢,我尝试了你的建议...请查看我所做的修改。 - Ben
@Ben 我更新了我的答案。 - manniL

0

你看,它并不是你所说的“int”类型 :)

echo PHP_INT_MAX; // echoes 9223372036854775807
$n = 9223372036854775807;
echo $n; // echoes 9223372036854775807

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

precision 设置为更大的值,如 manniL 所说,就可以解决问题。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接