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()
尝试显示带两位小数的数字时 number_format 和 sprintf 的意外结果