Javaを使用して、その通貨のデフォルトではないさまざまなロケールで外貨をフォーマットする方法を見つけるために最善を尽くしています。 Java.util.Currencyを見つけました。これは、さまざまなロケールで使用する適切なシンボルを表すことができます。つまり、米ドルの場合は、米国では$、他の国ではUS $またはUSDのシンボルを提供します。また、特定のロケールの通貨をフォーマットするJava.text.NumberFormatを見つけました。私の問題-util.Currencyは、デフォルト以外のロケールで通貨を表すための適切なシンボルとコードを提供しますが、ロケール固有の方法で通貨をフォーマットしません。 NumberFormatは、ロケールで渡す数字が通貨そのロケールの外貨ではないことを前提としています。
たとえば、getCurrencyInstance(Locale.GERMANY)を使用してから(1000)をフォーマットすると、1000ユーロをフォーマットしていると見なされます。実際には、米ドル、円、またはその他の通貨について、ドイツ語にローカライズされた正しい表現(金額の前後に記号を配置するかどうかにかかわらず、正しい小数点以下桁区切り記号)が必要な場合があります。私がこれまでに得た最善の方法は、NumberFormatを使用して数値を書式設定し、出力で数字以外の文字を検索し、util.Currencyから派生した記号に置き換えることです。しかし、これは非常に脆く、おそらく私の目的には十分な信頼性がありません。アイデア?どんな助けも大歓迎です。
GetCurrencyInstance(Locale.GERMANY)によって返されたインスタンスで setCurrency を使用してみてください
壊れた:
Java.text.NumberFormat format = Java.text.NumberFormat.getCurrencyInstance(Java.util.Locale.GERMANY);
System.out.println(format.format(23));
出力:23,00€
修正済み:
Java.util.Currency usd = Java.util.Currency.getInstance("USD");
Java.text.NumberFormat format = Java.text.NumberFormat.getCurrencyInstance(Java.util.Locale.GERMANY);
format.setCurrency(usd);
System.out.println(format.format(23));
出力:23,00 USD
私はles2からの回答に追加します https://stackoverflow.com/a/7828512/1536382 小数桁の数は通貨から取られていないと信じている、それ以外の場合は手動で設定する必要がありますクライアント(NumberFormat)にはJAPANロケールがあり、通貨はEUROまたはen_USであり、金額は小数桁なしで 'a la' Yen 'で表示されますが、これは予想どおりではありません。
Les2の例はformat.setMaximumFractionDigits(usd.getDefaultFractionDigits());
を追加することで改善できます。この例の特定の場合は関係ありませんが、NumberFormatのロケールとして小数とLocale.JAPANの数字を使用すると関係があります。
Java.util.Currency usd = Java.util.Currency.getInstance("USD");
Java.text.NumberFormat format = Java.text.NumberFormat.getCurrencyInstance(
Java.util.Locale.JAPAN);
format.setCurrency(usd);
System.out.println(format.format(23.23));
format.setMaximumFractionDigits(usd.getDefaultFractionDigits());
System.out.println(format.format(23.23));
出力されます:
USD23
USD23.23
NumberFormat code では、フォーマットの初期/デフォルト通貨に対して同様のことが行われ、メソッド DecimalFormat#adjustForCurrencyDefaultFractionDigits が呼び出されます。 NumberFormat.setCurrency を使用して通貨を後で変更する場合、この操作は実行されません。
import Java.util.*;
import Java.text.*;
public class Solution {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double payment = scanner.nextDouble();
scanner.close();
NumberFormat lp; //Local Payment
lp = NumberFormat.getCurrencyInstance(Locale.US);
System.out.println("US: " + lp.format(payment));
lp = NumberFormat.getCurrencyInstance(new Locale("en", "in"));
System.out.println("India: " + lp.format(payment));
lp = NumberFormat.getCurrencyInstance(Locale.CHINA);
System.out.println("China: " + lp.format(payment));
lp = NumberFormat.getCurrencyInstance(Locale.FRANCE);
System.out.println("France: " + lp.format(payment));
}
}
Scanner scanner = new Scanner(System.in);
double payment = scanner.nextDouble();
scanner.close();
Java.text.NumberFormat formatUS = Java.text.NumberFormat.getCurrencyInstance(Java.util.Locale.US);
String us=formatUS.format(payment);
Java.text.NumberFormat formatIn = Java.text.NumberFormat.getCurrencyInstance(new Java.util.Locale("en","in"));
String india=formatIn.format(payment);
Java.text.NumberFormat formatChina = Java.text.NumberFormat.getCurrencyInstance(Java.util.Locale.CHINA);
String china=formatChina.format(payment);
Java.text.NumberFormat formatFrance = Java.text.NumberFormat.getCurrencyInstance(Java.util.Locale.FRANCE);
String france=formatFrance.format(payment);
System.out.println("US: " + us);
System.out.println("India: " + india);
System.out.println("China: " + china);
System.out.println("France: " + france);
より良い方法は、Java.util.Localeをインポートすることです
次に、次のようなメソッドを使用します。
NumberFormat.getCurrencyInstance(Locale.theCountryYouWant);
例えばNumberFormat.getCurrencyInstance(Locale.US);
以下のコード、Ref Java Locale :
Scanner scanner = new Scanner(System.in);
double payment = scanner.nextDouble();
scanner.close();
// Write your code here.
String china = NumberFormat.getCurrencyInstance(new Locale("zh", "CN")).format(payment);
String india = NumberFormat.getCurrencyInstance(new Locale("en", "IN")).format(payment);
String us = NumberFormat.getCurrencyInstance(Locale.US).format(payment);
String france = NumberFormat.getCurrencyInstance(Locale.FRANCE).format(payment);
System.out.println("US: " + us);
System.out.println("India: " + india);
System.out.println("China: " + china);
System.out.println("France: " + france);