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

时间:2016-02-07 00:04:06

标签: php string parsing int type-conversion

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

但是既没有改变任何东西,它们就好像它们仍然是一个整体?

我的问题是具体为什么转换为字符串不起作用。有没有办法把数字变成一个字符串?感谢

2 个答案:

答案 0 :(得分:2)

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

ini_set('precision', 25);

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

我想到的最后一件事是使用explode函数将字符串拆分成数组并通过它进行交互。

编辑:当所有建议都失败后,您唯一的选择就是查看BC Math和/或GMP函数以及MoneyMathBigInteger包也应该使用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