Archive

文章標籤 ‘number_format’

貨幣金額數值轉換加上逗號「,」 for PHP

2010年3月5日 尚無評論

在PHP要顯示貨幣金額,就是有加上逗號「,」的數字是很容易的
原本以為是要使用printf 函式,結果去查了一下,有個number_format 函式就可以達到
以下為他的語法

string number_format(float number, int [decimals], string [dec_point], string [thousands_sep]);

如想看更詳細的說明,請至 http://php.net/manual/en/function.number-format.php

所以我們可以用以下指令

$return=number_format(“1000000.1234″,4,”.”,”,”);

就可以得到1,000,000.1234,看起來還蠻容易的,結果再進一步的測試,發現怪怪的
當我的值為 10000000000000.4232326 應該可以得到

10,000,000,000,000.4232

沒想到結果不對了,竟然得到如下的資料,小數的數值不對了

10,000,000,000,000.4238

多測了幾組,都發現這狀況,看來在數值大於一定位數時,就會有錯亂,應該是PHP數值的變數接受的位數有限,所以大於的數值就可能會補數來補數去的吧..反正就是亂了

所以為了這種位數超大的值,小弟寫了一個小函式,改用字串的方式處理,就可以排除此問題

function money_format($data,$n=0) {
$data1=number_format(substr($data,0,strrpos($data,”.”)==0?strlen($data):strrpos($data,”.”)));
$data2=substr( strrchr( $data, “.” ), 1 );
if($data2==0) $data3=””;
  else {
   if(strlen($data2)>$n) $data3=substr($data2,0,$n);
     else $data3=$data2;
  $data3=”.”.$data3;
  }
return $data1;
}

傳入值為$data 就是你要轉換的數值,$n就是小數點後面的位數

除了排除這個問題,在使用number_format時發現如果設定小數位數四位,如不足四數就會補零 。例如: 100000.12 會顯示  100,000.1200 ,所以小弟也順便調整,可以把後面的零給取消掉。在此提供給一樣遇到這問題的人一個方法(不一定是好方法,但一定是可行的方法)

Categories: PHP Tags: ,