PHP number_format 返回不正确的数字
Posted
技术标签:
【中文标题】PHP number_format 返回不正确的数字【英文标题】:PHP number_format returning incorrect number 【发布时间】:2014-03-11 13:24:33 【问题描述】:目前我有一个 19 位数长的数字,当我尝试打印它时,它会给我科学计数法,这正是我不需要的,因为这是一个特定的 ID 而不是数字。
我已经通过使用 number_format() 来抵消这一点,但是由于处理数字和我正在执行的处理量,加载时间增加了,并且最后 4 位数字不正确,因此数字很大。我的环境有限,因此可能无法加载其他模块,我最好的选择是什么?
仅举个例子:
$cid = 8162315223029015401;
$cid1 = sprintf($cid);
$cid2 = number_format($cid, 0, '.', '');
echo gettype($cid);
echo $cid1;
echo $cid2;
>> double
>> 8.162315223029E+18
>> 8162315223029015552
提前致谢!
谢谢大家,问题是 x32 系统上的最大长度。 Is there any way to maximize php_INT_MAX?
【问题讨论】:
您期望的格式是什么? echo 的预期输出应该是“8162315223029015401”,我正在页面上显示此数据。 number_format() 期望它的第一个参数是一个浮点值,这意味着你正在修改你的 int。 32 位还是 64 位 PHP? 最好使用 sprintf 处理浮点问题,例如显示指数值!! 【参考方案1】:使用字符串;
$cid = "8162315223029015401";
【讨论】:
没关系。 number_format() 需要一个浮点数。传入一个 int 或 int-as-string 只会“浮动化”数字并破坏较低的有效数字 数据来自一个对象,使用 settype($cid, "string") 仍然产生科学记数法,有什么想法吗? 但它只需要打印出来,所以我们可以省略number_format
?否则我没有正确理解这个问题。
PHP 处理这些大整数存在问题,要使其更复杂,取决于您使用的是 32 位还是 64 位操作系统。请参阅this answer 了解更多信息。【参考方案2】:
使用 sprintf:
$cid = 8162315223029015401;
$cid1 = sprintf("%.8f", $cid);
$cid2 = number_format($cid, 0, '.', '');
echo gettype($cid) . PHP_EOL;
echo $cid1 . PHP_EOL;
echo $cid2 . PHP_EOL;
输出:
integer
8162315223029015552.00000000
8162315223029015552
【讨论】:
以上是关于PHP number_format 返回不正确的数字的主要内容,如果未能解决你的问题,请参考以下文章
PHP字符串函数 number_format(以千位分隔符方式格式化一个数字)