【问题标题】:How to remove zeroes at the end of decimal part of a float number?如何删除浮点数小数部分末尾的零?
【发布时间】:2015-05-04 09:24:47
【问题描述】:

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

4.5000
0.0050
5.0000

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

4.50
0.005
5.00

我试过number_format,但它仍然在小数部分留下4位数字。

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

如何做到这一点?

【问题讨论】:

    标签: php floating-point decimal


    【解决方案1】:
    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));
    }
    

    结果符合预期;

    字符串(4)“4,50” 字符串(5)“0,005” 字符串(4)“5,00”

    【讨论】:

    • 有一个错误,我已经修复了。如果$num 是字符串 f.e. 0.0050,它不起作用。但是谢谢,您的解决方案效果很好。
    【解决方案2】:

    试试 -

    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;
    

    【讨论】:

    • @Legionar 更新了答案。
    • 谢谢。我会尝试所有解决方案。
    【解决方案3】:

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

    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
    

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

    【讨论】:

    • 这样你就可以删除所有的十进制零。 OP希望至少保留两位数。
    • 嗨,我根据您的评论编辑了我的答案。希望对您有所帮助.. :)
    • 嗨@Legionar,根据您的所有要求,我编辑了我的答案并改为制作了一个函数。希望这能解决您的问题...
    • 这不适用于 f.e. 4.8000,它将返回 4.8 而不是 4.80
    • 嗨@Legionar,我再次修改了我的答案..这个答案可以作为其他人未来的参考.. :)
    【解决方案4】:

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

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

    【讨论】:

    • 谢谢。我会尝试所有解决方案。
    猜你喜欢
    • 1970-01-01
    • 2017-09-19
    • 1970-01-01
    • 2021-01-21
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    相关资源
    最近更新 更多