2013-01-09 190 views
1

如何將所有數字轉換爲xx,xx十進制格式而不爆炸數字或字符串? like;十進制格式

8,9 --> 8,90 

8,99 --> 8,99 

12,1 --> 12,10 

129,9 --> 129,90 

有什麼想法嗎?

+1

http://php.net/manual/en/function.number-format.php – Rikesh

+0

@Rikesh不會爲帶有逗號的值工作 –

+0

http://php.net/sprintf ... – KingCrunch

回答

4

您可以使用number_format,如:

$n = 2.1; 
echo number_format($n, 2, ','); // 2,10 

如果你有逗號作爲小數您輸入的分隔符可以將值轉換爲浮點數:

$number = floatval(str_replace(',', '.', str_replace('.', '', $string_number))); 

str_replace('.', '', $string_number)用於去除千位分隔符。 str_replace(',', '.', ...)用於替換帶點的逗號。

1

$money = number_format($number, 2, ",", ","); // $number must be a float, i.e 8.8

如果您的輸入必須有逗號作爲小數點分隔符,就此別過:

$money = "20,2"; 
$fixed_money = floatval(str_replace(",", ".", $money)); 
echo number_format($fixed_money, 2, ",", ","); 
0

str_pad將添加缺少的零

$val = '1008,95'; 
$len = strpos($val, ',') + 3; 
$newval = str_pad($val, $len, '0', STR_PAD_RIGHT); 
echo "Value: " . $newval . "<br>"; 

你必須確保你的值沒有超過兩位數字,但

2

如果您已經啓用了intl擴展,最好的方法問題(IMO)在接受的答案是考慮到這樣一個問題:PHP: unformat money

您可以使用

例子:

$formatter = new NumberFormatter('de_DE', NumberFormatter::CURRENCY); 
var_dump($formatter->parseCurrency("75,25 €", $curr)); 

給出:float(75.25)

注意,intl extension默認情況下不啓用。請 參考Installation Instructions

之後,您將有一個浮點值和格式,這是使用number_format()一個微不足道的問題。

如果你沒有這樣的擴展,在這個問題上檢查出的正則表達式的方法:What a quick way to clean up a monetary string

0

我做了一個作曲家包,可以處理這取決於貨幣您要顯示這樣的事情。

https://packagist.org/packages/votemike/money

如果你也進入該國將格式化本地方式幣(有或沒有逗號,並用正確的小數位數)

$money = new Money(99.50, 'JPY'); 
$money->format(); //¥100 

所以,如果你只是創建一個新的貨幣對象,其中包含要顯示的金額和顯示的貨幣,調用該對象上的 - > format()應該爲您提供所需的結果。