2011-02-09 10 views
6

"en_US"と言うようにsetlocale()関数を使用してロケールを設定しました。php与えられたロケールの現在の小数点/桁区切り記号を取得する方法

今私はこのような桁区切りなし通貨をフォーマットしようとしている:

$通貨=をnumber_format($値、2、 、 '' '');

私は他の通貨がありますが、使用するロケールに応じて正しい小数点記号をnumber_formatに使用したい場合があります。

設定されているロケールに基づいて、何とか現在の小数点記号を取得する方法はありますか?

+0

try ['string money_format(string $ format、float $ number)'](http://php.net/money_format)。 – Jacco

答えて

9

localeconv()とする必要があります。マニュアルから:

ローカライズされた数値と 通貨の書式情報を含む連想配列 を返します。

Here is a list Windowsでsetlocale()と認識される文字列です。

+0

残念ながら、空の配列要素を返します。[thousands_sep] => [int_curr_symbol] => [currency_symbol] => [mon_decimal_point] => – Jorre

+0

これはウィンドウと関係があります。私のmac/linux上ではうまく動作しますが、Windowsのマシン間でコンバージョンを通貨に変換するソリューションを探していました。しかたがない。答えをありがとう! – Jorre

0

Sean Brightが正しく、localeconv()の機能を使用してください。 UnixベースのOSは "en-US"を使用しているのに、表記のように "en_US.UTF-8"を使用するため、OSに正しいロケールを設定してもよろしいですか?

+1

開発者用コンピュータと製品サーバーで異なるOSを使用している場合、 'setlocale'(LC_ALL、 'en_US.utf8'、 'en-US')'のように 'setlocale'を呼び出すよりも、関数は最初に見つかったロケールを使用します。 – WASD42

+0

ありがとう、それは解決策のように聞こえるが、配列はこれらの代替ロケールでもWindows上で空のままです – Jorre

+0

[MSDNマニュアル]からロケールを試してみてください(http://msdn.microsoft.com/en-us/library/39cwe7zf %28vs.71%29.aspx)。 'setlocale(LC_ALL、 'en_US.utf8'、 'american')'は私のXPとVistaの両方で完全に動作し、通貨名と記号と数値の区切り文字で塗りつぶした配列を返します。 – WASD42

1

それはベストではないが、それは動作します:

$locale_info = localeconv(); 
echo 'decimal_point=', $locale_info['decimal_point'], '<br/>/n'; 

localeconv()は、小数点文字以外の他の分野との連想配列を返します。

関連する問題