number_format()php删除尾随的零

yhxst69z  于 2023-09-29  发布在  PHP
关注(0)|答案(4)|浏览(119)

number_format()有没有办法在数字不是浮点数/小数的情况下省略小数位?
例如,我想要以下输入/输出组合:

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

有没有一种方法可以只使用标准的number_format()来实现这一点?

wj8zmpe1

wj8zmpe11#

您可以将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

20jt8wwn

20jt8wwn2#

如果你想使用空格这里是更好的解决方案

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;
}
zengzsys

zengzsys3#

用途:

$a = 50.00;

$a = round($a, 2);

即使数字后面有两个零,如果你对它进行四舍五入,它也不会显示小数位,除非它们有某种值。
所以50.00使用2个地方四舍五入将是50,但50.23将是50.23
除非指定向上或向下舍入的点,否则它不会更改十进制值。因此,只需使用默认的round()

weylhg0b

weylhg0b4#

此函数适用于PHP 8及更高版本,或者需要str_contains()函数的polyfill。

function sanitize_float($value): string
{
    $value = (string) $value;
    if (str_contains($value, '.')) {
        $value = rtrim(rtrim((string) $value, '0'), '.');
    }

    return $value;
}

相关问题