19

長い(セント)を通貨形式に変換するのに問題があります。

私のコード:

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になります。

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

4

7 に答える 7

38

In case You have long to start with, you still should use java.math.BigDecimal.

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

Let it be once again said out loud: One should never use floating-point variables to store money/currency value.

于 2012-09-24T08:07:06.663 に答える
27

セントをドルに変換するには、次を使用できます

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

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

于 2012-09-24T08:11:55.840 に答える
10

あなたのリテラルは です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));

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

于 2012-09-24T07:51:30.920 に答える
2

フォーマットの問題ではなく、入力の問題です。入力を 100 で割ると、すべて設定されます。

float payment = 1099 / ((float) 100);
于 2012-09-24T07:42:25.193 に答える
0

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

于 2012-09-24T07:41:49.157 に答える
0

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

NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.ENGLISH);
String output = nf.format(value);
System.out.println(value + " " + output);
于 2012-09-24T07:43:44.857 に答える