是否有任何函数可以轻松回显长度超过15位的整数? 我管理的唯一方法就是这样:
$num = 123456789012345;
$num = number_format($num);
$num = str_replace(',', '', $num);
echo $num;
但即使这样,它也只能精确到17位数。在第16位数字之后,数字不能准确打印(因为作为浮点数,它开始变得不准确 - see here)。
编辑:从下面的答案我写了
ini_set('precision',40);
然后直接回复$ num。所有这一切都是,简单地说,不显示浮点数中的小数点。在第16位数字后,它开始变得不准确。 我还尝试了将其更改为数组然后使用str_split($num);
进行迭代的其他建议,并且数字从第17位数字开始也是不准确的!
最简单的解决方案是将整数转换为字符串。我试过了:
$num = (string)$num;
//and
$num = strval($num);
但是既没有改变任何东西,它们就好像它们仍然是一个整体?
我的问题是具体为什么转换为字符串不起作用。有没有办法把数字变成一个字符串?感谢
答案 0 :(得分:2)
我能想到的唯一解决方案是改变php.ini中浮动的精度
ini_set('precision', 25);
我不知道你从哪里得到这些大数字,但我也建议你看看bc functions!
我想到的最后一件事是使用explode函数将字符串拆分成数组并通过它进行交互。
编辑:当所有建议都失败后,您唯一的选择就是查看BC Math和/或GMP函数以及MoneyMath。 BigInteger包也应该使用GMP和BC。
答案 1 :(得分:0)
嗯,你看,它并不像你声称的那样是“int”。)
echo PHP_INT_MAX; // echoes 9223372036854775807
$n = 9223372036854775807;
echo $n; // echoes 9223372036854775807
$n = 9223372036854775808;
echo $n; // echoes 9.2233720368548E+18
将precision
设置为更高的值as manniL said,就可以了。
ini_set("precision", 50);
$n = 9223372036854775808;
echo $n; // echoes 9223372036854775808