在PHP中(使用内置函数)我想转换/格式化一个带小数的数字,这样只显示非零小数.然而,我的另一个要求是,如果它是一个没有小数值的数字,我仍然希望显示为零.例子:
9.000 -> 9.0
9.100 -> 9.1
9.120 -> 9.12
9.123 -> 9.123
Run Code Online (Sandbox Code Playgroud)
rtrim($value, "0")差不多了.rtrim的问题在于它离开9.000了9..sprintf()看起来像是一个候选人,但我不能让它有一个可变的小数.number_format()服务于不同的目的,这些都是我能想到的......
再次,我想指出我不是在寻找你自己的解决方案,我正在寻找一种使用内部PHP功能来实现这一目标的方法.我可以编写一个能够自己轻松完成此功能的函数,所以请保持这样的答案.
我不认为这是一种方法.正则表达式可能是您最好的解决方案:
$value = preg_replace('/(\.[0-9]+?)0*$/', '$1', $value);
Run Code Online (Sandbox Code Playgroud)
演示:
php> $a = array('0.000', '0.0001', '0.0101', '9.000', '9.100', '9.120', '9.123');
php> foreach($a as $b) { echo $b . ' => ' . preg_replace('/(\.[0-9]+?)0*$/', '$1', $b)."\n"; }
0.000 => 0.0
0.0001 => 0.0001
0.0101 => 0.0101
9.000 => 9.0
9.100 => 9.1
9.120 => 9.12
9.123 => 9.123
Run Code Online (Sandbox Code Playgroud)
小智 6
尝试这样的事情
$number = 2.00;
echo floor_dec($number,$deg);
function floor_dec($number, $deg = null)
{
if ($deg == null)
return $number * 1000 / 1000;
else
return $number * pow(10, $deg) / pow(10, $deg);
}
Run Code Online (Sandbox Code Playgroud)
将显示"2"
如果您需要内置解决方案并且您使用的是 4.2 之后的 PHP 版本,您可以尝试floatval():
echo floatval(9.200);
Run Code Online (Sandbox Code Playgroud)
印刷
9.2
Run Code Online (Sandbox Code Playgroud)
但
echo floatval(9.123);
Run Code Online (Sandbox Code Playgroud)
印刷
9.123
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。
不应该吗?:
$value = preg_replace('~0*$~', '', $value);
Run Code Online (Sandbox Code Playgroud)
PHP preg_replace语法是
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7408 次 |
| 最近记录: |