number_format()有没有办法在数字不是浮点数/小数的情况下省略小数位?例如,我想要以下输入/输出组合:
number_format()
50.8 => 50.8 50.23 => 50.23 50.0 => 50 50.00 => 50 50 => 50
有没有一种方法可以只使用标准的number_format()来实现这一点?
wj8zmpe11#
您可以将0添加到格式化字符串。它将删除尾随的零。
0
echo number_format(3.0, 1, ".", "") + 0; // 3
float
echo (float) 3.0; // 3
echo preg_replace("/\.?0+$/", "", 3.0); // 3 echo preg_replace("/\d+\.?\d*(\.?0+)/", "", 3.0); // 3
Snippet 1 DEMOSnippet 2 DEMOSnippet 3 DEMO
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; }
zengzsys3#
用途:
$a = 50.00; $a = round($a, 2);
即使数字后面有两个零,如果你对它进行四舍五入,它也不会显示小数位,除非它们有某种值。所以50.00使用2个地方四舍五入将是50,但50.23将是50.23。除非指定向上或向下舍入的点,否则它不会更改十进制值。因此,只需使用默认的round()
50.00
50
50.23
round()
weylhg0b4#
此函数适用于PHP 8及更高版本,或者需要str_contains()函数的polyfill。
str_contains()
function sanitize_float($value): string { $value = (string) $value; if (str_contains($value, '.')) { $value = rtrim(rtrim((string) $value, '0'), '.'); } return $value; }
4条答案
按热度按时间wj8zmpe11#
您可以将
0
添加到格式化字符串。它将删除尾随的零。float
数据类型。注意:在类型转换为float
后,您可能会失去精度,数字越大,截断数字的机会越大。Snippet 1 DEMO
Snippet 2 DEMO
Snippet 3 DEMO
20jt8wwn2#
如果你想使用空格这里是更好的解决方案
zengzsys3#
用途:
即使数字后面有两个零,如果你对它进行四舍五入,它也不会显示小数位,除非它们有某种值。
所以
50.00
使用2个地方四舍五入将是50
,但50.23
将是50.23
。除非指定向上或向下舍入的点,否则它不会更改十进制值。因此,只需使用默认的
round()
weylhg0b4#
此函数适用于PHP 8及更高版本,或者需要
str_contains()
函数的polyfill。