PHP number_format 显示不正确

Posted

技术标签:

【中文标题】PHP number_format 显示不正确【英文标题】:PHP number_format displaying incorrectly 【发布时间】:2014-09-18 05:00:57 【问题描述】:

编程新手并参加 php 课程。我写了一个非常小的程序来测试 number_format 函数。这是我的代码:

$num = 9876543210123456789; 
$result = number_format($num);
echo = $result;

输出为:9,876,543,210,123,456,512

我确定这与 $num 的长度有关。但一直无法找到发生这种情况的确切解释/原因。

【问题讨论】:

number_format — 格式化一个以千为单位的数字。那么什么是不正确的? 您对数字格式有什么期望?它是用小数位、千位和千位分隔符来格式化数字。请参考php手册。 本题与逗号无关,请再读一遍。他们感到困惑的是为什么输出数字与他们输入的数字不同。 【参考方案1】:

您看到的数字不同,因为您提供的数字大到足以导致系统溢出。尝试使用较小的数字

<?php
$num = 9876543210123; 
$result = number_format($num);
echo  $result;                    // will show as expected, with formatting

即使您不在该号码上使用number_format,您的号码仍然会导致溢出。试试这个

$num = 9876543210123456789; 
echo  $num;   // not what you see above

另见:

What's the maximum size for an int in PHP?

PHP Integers and Overflow

【讨论】:

感谢您的回复。这正是我所想的。还要感谢您提供手册的链接。我应该先看看那里,但是,谢谢。【参考方案2】:

您不能将大数传递给number_format() 函数。如果您只需要格式化数字,您可以编写自己的函数来用逗号分隔数字,以 3 乘 3。

原因是,如果你查看手册,数字格式将第一个参数作为浮点数。您需要对floatints 有一个很好的了解才能理解它发生的原因。

这是我在 SO 中发现的一些有趣的东西,它与您的问题相同,并且有一个很好的答案。请检查一下。

Why is my number value changing using number_format()?

【讨论】:

也谢谢你,非常有帮助。

以上是关于PHP number_format 显示不正确的主要内容,如果未能解决你的问题,请参考以下文章

PHP number_format 返回不正确的数字

PHP number_format() 十进制 .99 变为 .00

php number_format() 的问题

用逗号格式化数字PHP [重复]

表示从 MySQL 数据库中获取的“金钱”属性时,在 PHP 中使用的正确格式是啥?

PHP 数组值正确但显示不正确