number_format 以小数点 5 结尾的数字向上取整

Posted

技术标签:

【中文标题】number_format 以小数点 5 结尾的数字向上取整【英文标题】:number_format rounding up number that end with 5 decimal 【发布时间】:2014-10-25 19:28:22 【问题描述】:

有没有办法让 number_format 不对以“5”小数结尾的数字进行四舍五入?

echo number_format(25.58,1); // 25.6 - OK 
echo number_format(85.72,1); // 85.7 - OK 
echo number_format(26.25,1); // 26.3 - WHY? 26.2 needed here.

注意:我不是在问this

【问题讨论】:

26.5 没有任何意义。你确定你说的不是 26.2? 因为您指定了 1 个小数位。将25 转换为小数点后一位将得到 3 @rjdown 当然,刚刚更正了我的问题。 @Vector 是的,当最后一个小数为 5 时,我需要一种方法让 number_format 忽略此舍入。 所以 0.6 可以向上取整,0.5 应该向下取整? 【参考方案1】:

不要使用number_format(),而是使用round 函数。您可以指定要如何舍入。

echo round(25.58, 1, php_ROUND_HALF_DOWN); // 25.6
echo round(85.72, 1, PHP_ROUND_HALF_DOWN); // 85.7
echo round(26.25, 1, PHP_ROUND_HALF_DOWN); // 26.2

【讨论】:

注意:仅限 PHP 5.3+(不幸的是,大量 5.2 或更早版本的服务器仍在运行) 这是我会选择的方法(显然以php版本为准)【参考方案2】:

目前尚不清楚您要达到的目标。根据您对“忽略”以五结尾的数字的评论,我模拟了一个非常基本的快速函数来执行此操作

echo format_numbers(25.58,1); // 25.6 
echo format_numbers(85.72,1); // 85.7 
echo format_numbers(26.25,1); // 26.2 

function format_numbers($number, $decimal)

    if(substr($number, -1) == '5')
        $number = $number - 0.1;
    
    return number_format($number, $decimal);


此示例适用于不支持首选方法round(26.25, 1, PHP_ROUND_HALF_DOWN) 的 PHP 版本。上面的例子将从数字中减去0.1,从而迫使number_format()向下舍入。

【讨论】:

以上是关于number_format 以小数点 5 结尾的数字向上取整的主要内容,如果未能解决你的问题,请参考以下文章

php number_format()函数 语法

PHP 使用 number_format 并正确显示小数点

在 PHP 中处理货币 - 小数位和 number_format()

尝试显示带两位小数的数字时 number_format 和 sprintf 的意外结果

PHP字符串函数 number_format(以千位分隔符方式格式化一个数字)

如何使 number_format() 不四舍五入