web-dev-qa-db-ja.com

Java longを通貨に変換する

長い(セント)を通貨形式に変換できません。

私のコード:

long doublePayment = 1099;  //Should equal $10.99
DecimalFormat dFormat = new DecimalFormat();
String formattedString = dFormat.format(doublePayment);
System.out.println(formattedString);

出力:1,099

私も試しました:

long doublePayment = 1099;
NumberFormat n = NumberFormat.getCurrencyInstance(Locale.US); 
String s = n.format(doublePayment);
System.out.println(s);

これはセントなので、出力は10.99または$ 10.99になります。

私が間違っていることを理解できません。ありがとう!!!

17
mcd

セントをドルに変換するには

long doublePayment = 1099;
NumberFormat n = NumberFormat.getCurrencyInstance(Locale.US); 
String s = n.format(doublePayment / 100.0);
System.out.println(s);

これは、70兆ドルまで正確です。

23
Peter Lawrey

始めるのが長い場合でも、Java.math.BigDecimalを使用する必要があります。

    long doublePayment = 1099;
    BigDecimal payment = new BigDecimal(doublePayment).movePointLeft(2);
    System.out.println("$" + payment); // produces: $10.99

もう一度声に出して言わせてください:通貨/通貨の値を格納するために浮動小数点変数を使用してはいけません。

33
Lauri

リテラルは_1099_であり、これは千と九十九であり、Java整数リテラルのルールに対応しています。JVMロケールによると、この数値は_1,099_で表されます。ヨーロッパにいる場合は_1.099_になります。したがって、これはoutputの問題ではなく、-input

問題は、固定小数点値を表す必要があるが、 _Java.math.BigDecimal_ がわからないことであり、それを偽造してみてください。いくつかの計算を行うと、物事は壊れます。しないでください。

これはあなたがすることになっていることです。単に(コードもはるかに少ない):

_BigDecimal payment = new BigDecimal("10.99");
System.out.println(String.format("$%.2f", payment));
_

numberStringで実際に初期化する方法に注意してください。また、String.format()現在のロケールの を処理します。または、オーバーロードされたメソッドを介して必要なものを指定することもできます。

9
Raffaele

これらの回答はいずれも、ロケールによって通貨の小数桁数が異なることを考慮に入れていません。たとえば、日本円の小数桁はゼロですが、ヨルダンディナールは3桁ですが、もちろん、米ドルは2桁です。私はこれがより適切な解決策であると信じています:

    long payment = 1099L;
    BigDecimal bd = new BigDecimal(payment);

    Locale jpLocale = new Locale("ja", "JP");//Japan

    Currency jpCurrency = Currency.getInstance(jpLocale);
    NumberFormat jpnf = NumberFormat.getCurrencyInstance(jpLocale);
    int jpNumFractionalDigits = jpCurrency.getDefaultFractionDigits();

    BigDecimal jpbd = bd.movePointLeft(jpNumFractionalDigits);


    Locale usLocale = new Locale("en", "US");//United States

    Currency usCurrency = Currency.getInstance(usLocale);
    NumberFormat usnf = NumberFormat.getCurrencyInstance(usLocale);
    int usNumFractionalDigits = usCurrency.getDefaultFractionDigits();

    BigDecimal usbd = bd.movePointLeft(usNumFractionalDigits);



    System.out.println(jpnf.format(jpbd)); //prints ¥1,099
    System.out.println(usnf.format(usbd));//prints $10.99
1
smitty1

double doublePayment = 10.99;このような通貨を提供する必要があります。 NumberFormatは、小数点が表示されない限り、セントまたは$のどちらで指定したかを理解できません。

0
Amit Deshpande

これはフォーマットの問題ではなく、入力の問題です。入力を100で割ります。これで準備は完了です。

float payment = 1099 / ((float) 100);
0
pap

通貨フォーマッターを使用:

NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.ENGLISH);
String output = nf.format(value);
System.out.println(value + " " + output);
0
bigGuy