number_format() php 删除尾随零
number_format() php remove trailing zeros
如果数字不是 float/decimal,number_format()
是否可以省略小数位?
例如,我想要以下 input/output 组合:
50.8 => 50.8
50.23 => 50.23
50.0 => 50
50.00 => 50
50 => 50
有没有办法只用标准 number_format()
来做到这一点?
您可以将 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
如果你想在这里使用空格是更好的解决方案
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;
}
使用:
$a = 50.00;
$a = round($a, 2);
即使数字后面有 2 个零,如果将其四舍五入,它也不会显示小数位,除非它们具有某种值。
因此 50.00
使用 2 个位置四舍五入将是 50
,但 50.23
将是 50.23
。
除非您指定在哪一点向上或向下舍入,否则它不会更改您的小数值。所以只需使用默认 round()
如果数字不是 float/decimal,number_format()
是否可以省略小数位?
例如,我想要以下 input/output 组合:
50.8 => 50.8
50.23 => 50.23
50.0 => 50
50.00 => 50
50 => 50
有没有办法只用标准 number_format()
来做到这一点?
您可以将 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
如果你想在这里使用空格是更好的解决方案
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;
}
使用:
$a = 50.00;
$a = round($a, 2);
即使数字后面有 2 个零,如果将其四舍五入,它也不会显示小数位,除非它们具有某种值。
因此 50.00
使用 2 个位置四舍五入将是 50
,但 50.23
将是 50.23
。
除非您指定在哪一点向上或向下舍入,否则它不会更改您的小数值。所以只需使用默认 round()