如何删除浮点数小数部分末尾的零?

How to remove zeroes at the end of decimal part of a float number?

我在数据库中有小数部分为 4 位的产品价格,即;

4.5000
0.0050
5.0000

我想在网站上显示这些价格最少保留 2 位小数(不四舍五入),即;

4.50
0.005
5.00

我试过了number_format,但是小数部分还是有4位。

而且我还需要在该数字的基数部分使用千位分隔符并使用自己的小数部分分隔符。

如何做到这一点?

为了将来参考,我再次修改了我的答案,是的,它输出了预期的结果:

function trimDecimalZero($number) {
    $number += 0;
    if(strlen(substr(strrchr($number, "."),1)) < 2) {
        $number = sprintf("%0.2f", $number);  
    }
    return $number;
}

echo trimDecimalZero(4.5000); //4.50
echo trimDecimalZero(0.00050); //0.00005
echo trimDecimalZero(5.0000); //5.00

希望这对未来的读者有所帮助!

试试 -

echo number_format('4.5000', 2);

更新

$v = (float)'0.0050';
$newV = explode('.', $v);
if(strlen($newV[1]) < 2) {
   $v = number_format($v, 2);   
}
echo $v;

我想如果是为了展示目的,你可以这样做:

$number= 4.500000;
$number.= 'x';
$length = strlen($number);

$new_number = rtrim($number, '0x');
if (strlen($new_number) < $length) {
    $new_number .= '0';
}

echo $new_number;
function trimDecimalZero($num, $delim = ',', $tsep = ' ') {
    @list($base, $decimals) = explode('.',
        rtrim(number_format((float) $num, 4, '.', $tsep), '0'));

    if (intval($decimals)) {
        return sprintf('%s%s%s',
            $base, $delim, strlen($decimals) < 2 ? $decimals .'0' : $decimals);
    }

    return sprintf('%s%s%02d', $base, $delim, $decimals);
}

$nums = [4.5000, 0.0050, 5.0000];
foreach ($nums as $num) {
    var_dump(trimDecimalZero($num));
}

结果符合预期;

string(4) "4,50"
string(5) "0,005"
string(4) "5,00"