2009-04-16 1 views
15

DBに格納されている金額(たとえば10.0)に値が格納されています。通貨/通貨コードにアクセスすることもできます。 Localeを知らないときにNumberFormat/DecimalFormat /(他の?)を使用してフォーマットするにはどうすればよいですか?ドキュメントによると、それは外貨では動作しないデフォルトのロケールを選択します。Java:ロケールマッピングへの通貨は可能ですか?

答えて

15

通常、通貨の一般的なロケールではなく、ユーザーの優先ロケールで金額を書式設定するのが正しい動作です。クライアント側では、ユーザーの環境設定(Locale.getDefault())を行います。 Webサーバー側で何かをしている場合は、Accept-Languageまたはページコンテンツのロケールを使用して適切なロケールを取得します。

推論はこれです: イングリッシュ・米国のユーザーは€10,000,000.15ではなく、適切な-用-ドイツ同等のものを理解し、€10.000.000,15

通貨自体は推測するのに十分な情報が含まれていませんとにかく適切なロケール。

2

通貨コードがEURの場合はどうなりますか?そして、それは打撃を取っている間、USDはまだ世界中で使用されています。通貨コードからロケールを推測することは信頼できないようです。代わりにロケールの明示的なユーザー設定を導入できますか?

あなたが探している情報は、組み込みのJava通貨データベースの一部ではないため、APIはありません。曖昧でない多くのケースについては、create your own tableとすることができます。

0

あなたのデータベースに通貨価値が保存されている場合は、同時にユニットにぶら下がっているはずです。あなたは今それをやっているように聞こえる。ロケールをデータベースに同時に追加できますか?まともな解決策かもしれません。

23

JasonTrueが正しいですが、あなたはのNumberFormatのロケールの通貨を上書きすることができます。

NumberFormat numberFormat = NumberFormat.getCurrencyInstance(locale); 
//the user may have selected a different currency than the default for their locale 
Currency currency = Currency.getInstance("GBP"); 
numberFormat.setCurrency(currency); 
numberFormat.format(amount); 
0

ここ通貨コード

let locale = NSLocale(localeIdentifier: NSLocale.canonicalLocaleIdentifierFromString(NSLocale.localeIdentifierFromComponents([NSLocaleCurrencyCode: currencyCode]))) 

let formatter = NSNumberFormatter() 
formatter.numberStyle = .CurrencyStyle 
formatter.currencyCode = currencyCode 
formatter.locale = locale 
formatter.maximumFractionDigits = 2 
formatter.stringFromNumber(number) 
からロケールを決定する方法です
関連する問題