2012-03-15 47 views
1

比方說,我有一個數字像PHP轉換數

123456000000 
12345000000 
123456000 
123456 

,我希望他們能夠顯示爲

123.45B 
12.345B 
123.45M 
123,456 

我能想到的要做到這一點,最好的辦法是讓字符串長度來確定我是否需要一個B,M,或者只是逗號而只是substr的前五個字符。我確信有更好的方法,但我不想太過分,直到我意識到我的想法很糟糕。哈。

有什麼好的建議?

EDIT

我在B和M.那些的混亂道歉表示:

  • 100萬年
  • 中號 100萬年
+3

可能不會完全解決你的問題,但['number_format()'](http://php.net/number_format)可能是能夠幫助。此外,在同一頁上的評論http://us2.php.net/manual/en/function.number-format.php#89888 – 2012-03-15 19:46:08

回答

3

好了,所以我以前的答覆認爲你處理的文件大小,我刪除了它。然而,這種解決方案的邏輯是一樣的:

function format_number($num) { 
    if($num < 1000000) { 
     return number_format($num); 
    } elseif ($num < 1000000000) { 
     return number_format($num/1000000, 2) . 'M'; 
    } else { 
     return number_format($num/1000000000, 2) . 'B'; 
    } 
} 

http://codepad.org/nb89ze5J

+0

+1使用的鍵盤。我從來沒有見過這種。 – Jacksonkr 2012-03-15 20:18:37

+0

@傑克遜,我也在這裏瞭解到它在StackOverflow! – bfavaretto 2012-03-15 20:20:08

+0

@傑克遜,現在我注意到它不會返回你想要的第二個數字(它給12.35B而不是12.354B),但我相信這個代碼應該作爲一個起點呢...... – bfavaretto 2012-03-15 20:22:14

0

別t知道最後的BM一部分,但有一個在PHP稱爲number_format功能,執行以下操作(從文件) -

$number = 1234.56; 

// english notation (default) 
$english_format_number = number_format($number); 
// 1,235 

// French notation 
$nombre_format_francais = number_format($number, 2, ',', ' '); 
// 1 234,56 

$number = 1234.5678; 

// english notation without thousands separator 
$english_format_number = number_format($number, 2, '.', ''); 
// 1234.57 
+0

我在我的問題編輯中添加了一些關於B和M縮寫的解釋。我未能正確評估我的問題的清晰度:( – Jacksonkr 2012-03-15 19:54:58

+0

@傑克遜:然後在同一頁面上查看此評論:http://www.php.net/manual/en/function.number-format.php# 89888 – 2012-03-15 19:55:48