是否有任何函数可以轻松回显长度为 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