長い(セント)を通貨形式に変換できません。
私のコード:
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になります。
私が間違っていることを理解できません。ありがとう!!!
セントをドルに変換するには
long doublePayment = 1099;
NumberFormat n = NumberFormat.getCurrencyInstance(Locale.US);
String s = n.format(doublePayment / 100.0);
System.out.println(s);
これは、70兆ドルまで正確です。
始めるのが長い場合でも、Java.math.BigDecimalを使用する必要があります。
long doublePayment = 1099;
BigDecimal payment = new BigDecimal(doublePayment).movePointLeft(2);
System.out.println("$" + payment); // produces: $10.99
もう一度声に出して言わせてください:通貨/通貨の値を格納するために浮動小数点変数を使用してはいけません。
リテラルは_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));
_
numberをStringで実際に初期化する方法に注意してください。また、String.format()
は 現在のロケールの を処理します。または、オーバーロードされたメソッドを介して必要なものを指定することもできます。
これらの回答はいずれも、ロケールによって通貨の小数桁数が異なることを考慮に入れていません。たとえば、日本円の小数桁はゼロですが、ヨルダンディナールは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
double doublePayment = 10.99;
このような通貨を提供する必要があります。 NumberFormat
は、小数点が表示されない限り、セントまたは$のどちらで指定したかを理解できません。
これはフォーマットの問題ではなく、入力の問題です。入力を100で割ります。これで準備は完了です。
float payment = 1099 / ((float) 100);
通貨フォーマッターを使用:
NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.ENGLISH);
String output = nf.format(value);
System.out.println(value + " " + output);