【问题标题】:number_format rounding up number that end with 5 decimalnumber_format 以小数点 5 结尾的数字向上取整
【发布时间】: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 应该向下取整?

标签: php number-formatting


【解决方案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()向下舍入。

【讨论】:

    猜你喜欢
    • 2011-05-25
    • 2020-01-12
    • 2015-12-26
    • 2013-05-30
    • 1970-01-01
    • 2019-06-18
    • 2012-09-06
    • 2016-10-11
    • 1970-01-01
    相关资源
    最近更新 更多