如果引用或轉貼,麻煩註明出處與本網誌連結,否則視為侵權。

2020年1月10日

PHP格式化金額數字顯示千位號但不顯示小數位後方的零

作者: Fred F.M. Wang (FW知識瑣記) 日期:2020/1/10


PHP程式想要格式化金額數字,顯示千位號與指定顯示小數幾位要使用number_format()函式,
但是如果要顯示千位號但不顯示小數位後方的零,如下面例子 :
$val1 = 12345.67;
echo number_format($val1,3);    // (1) 顯示 12,345.670
$val1 = 12345.6; 
echo number_format($val1,3);    // (2) 顯示 12,345.600
$val1 = 12345; 
echo number_format($val1,3);    // (3) 顯示 12,345.000
如果我希望(1)顯示 12,345.67  (2)顯示 12,345.6 (3) 顯示 12,345 
也就是不想要顯示數字後方的零,要怎麼做?

寫一個function number_format_notrailingzeros()
傳地參數 $number為要格式化的數字,$decimal是要顯示最長的小數位數,如下

function number_format_notrailingzeros($number,$decimal){
    $num = number_format($number,$decimal);    
    $pos = strpos($num, ".");
    if($pos === false) { // 無小數
       return $num;
    }else{ // 有小數
       return rtrim(rtrim($num, "0"), "."); // 先移除最後面的零, 再先移除最後面的小數點
    }
}

然後,用上面的number_format_notrailingzeros() 取代number_format(), 如下 :
$val1 = 12345.67;
echo number_format_notrailingzeros($val1,3);    // (1) 顯示 12,345.67
$val1 = 12345.6; 
echo number_format_notrailingzeros($val1,3);    // (2) 顯示 12,345.6
$val1 = 12345; 
echo number_format_notrailingzeros($val1,3);    // (3) 顯示 12,345





沒有留言:

張貼留言

歡迎提供意見, 謝謝 (註 : 留言經過版主審核通過才會發布)