number_format()php删除尾随零

时间:2018-04-18 03:11:24

标签: php floating-point numbers decimal number-formatting

如果数字不是浮点数/小数,有没有办法让number_format()省略小数位?

例如,我想要以下输入/输出组合:

50.8 => 50.8
50.23 => 50.23
50.0 => 50
50.00 => 50
50 => 50

有没有办法只使用标准number_format()

来执行此操作

2 个答案:

答案 0 :(得分:4)

您可以将0添加到格式化字符串中。它将删除尾随零。

echo number_format(3.0, 1, ".", "") + 0; // 3

更好的解决方案:上述解决方案无法适用于特定的区域设置。因此,在这种情况下,您只需键入数字转换为float数据类型。注意:在类型转换为float后,您可能会丢失精度,数字越大,截断数字的可能性就越大。

echo (float) 3.0; // 3

终极解决方案: 唯一安全的方法是使用正则表达式:

echo preg_replace("/\.?0+$/", "", 3.0); // 3
echo preg_replace("/\d+\.?\d*(\.?0+)/", "", 3.0); // 3

<强> Snippet 1 DEMO

<强> Snippet 2 DEMO

<强> Snippet 3 DEMO

答案 1 :(得分:1)

如果要使用空格,这是更好的解决方案

function real_num ($num, $float)
{
    if (!is_numeric($num) OR is_nan($num)  ) return 0;

    $r = number_format($num, $float, '.', ' ');

    if (false !== strpos($r, '.'))
        $r = rtrim(rtrim($r, '0'), '.');

    return $r;
}