web-dev-qa-db-ja.com

Javaでの外国ロケールの通貨のフォーマット

Javaを使用して、その通貨のデフォルトではないさまざまなロケールで外貨をフォーマットする方法を見つけるために最善を尽くしています。 Java.util.Currencyを見つけました。これは、さまざまなロケールで使用する適切なシンボルを表すことができます。つまり、米ドルの場合は、米国では$、他の国ではUS $またはUSDのシンボルを提供します。また、特定のロケールの通貨をフォーマットするJava.text.NumberFormatを見つけました。私の問題-util.Currencyは、デフォルト以外のロケールで通貨を表すための適切なシンボルとコードを提供しますが、ロケール固有の方法で通貨をフォーマットしません。 NumberFormatは、ロケールで渡す数字が通貨そのロケールの外貨ではないことを前提としています。

たとえば、getCurrencyInstance(Locale.GERMANY)を使用してから(1000)をフォーマットすると、1000ユーロをフォーマットしていると見なされます。実際には、米ドル、円、またはその他の通貨について、ドイツ語にローカライズされた正しい表現(金額の前後に記号を配置するかどうかにかかわらず、正しい小数点以下桁区切り記号)が必要な場合があります。私がこれまでに得た最善の方法は、NumberFormatを使用して数値を書式設定し、出力で数字以外の文字を検索し、util.Currencyから派生した記号に置き換えることです。しかし、これは非常に脆く、おそらく私の目的には十分な信頼性がありません。アイデア?どんな助けも大歓迎です。

29
JPittard

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

45
les2

私は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 を使用して通貨を後で変更する場合、この操作は実行されません。

23
Testo Testini
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));
    }
}
7
Ankush
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);
2
Tanvir Masood

より良い方法は、Java.util.Localeをインポートすることです

次に、次のようなメソッドを使用します。

NumberFormat.getCurrencyInstance(Locale.theCountryYouWant);

例えばNumberFormat.getCurrencyInstance(Locale.US);

1
Stephen Lee

以下のコード、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);
0
TechFree