PHP仅显示重要(非零)小数

Ale*_*lex 14 php numbers

在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.0009..sprintf()看起来像是一个候选人,但我不能让它有一个可变的小数.number_format()服务于不同的目的,这些都是我能想到的......

再次,我想指出我不是在寻找你自己的解决方案,我正在寻找一种使用内部PHP功能来实现这一目标的方法.我可以编写一个能够自己轻松完成此功能的函数,所以请保持这样的答案.

Thi*_*ter 7

我不认为这是一种方法.正则表达式可能是您最好的解决方案:

$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)

  • 乔尔是真的,但"9.000"变为"9","9.100"将保持"9.100". (2认同)

小智 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"


Fed*_*can 6

如果您需要内置解决方案并且您使用的是 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)

希望这可以帮助。


Jam*_*son 5

不应该吗?:

$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)