NumberFormat
を使用して特定のdouble
(デフォルトのロケールで十分)および特定の小数点以下の桁数のLocale
値をフォーマットするにはどうすればよいですか?
たとえば、次の値があります。
double d1 = 123456.78;
double d2 = 567890;
そして、次の方法で印刷したいと思います。たとえば、米国のロケールと小数点以下2桁を使用します。
123,456.78
567,890.00
この場合、実際には丸めモードは気にしません。これらのdouble値は、指定されたスケールのBigDecimal
から取得されるため、小数点以下の桁数は常に小数点以下の桁数I以下です。印刷したい。
編集:
もう少し明確にするために、ロケールに依存する方法でお金を表示したいのですが、小数点以下の桁数は固定されています。上記の例は、システムロケールがen_US
の場合に値をフォーマットする方法を示しています。ここで、システムロケールがcs_CZ
(チェコ語)であるとすると、同じ番号を次のようにフォーマットする必要があります。
123 456,78
567 890,00
では、NumberFormatを設定して、常に小数点以下2桁を表示し、現在のロケールに基づいて千単位の区切り文字と小数点を表示するにはどうすればよいですか?
NumberFormatのドキュメントを読みたい場合は、解決策は明らかです。
double d1 = 123456.78;
double d2 = 567890;
// self commenting issue, the code is easier to understand
Locale fmtLocale = Locale.getDefault(Category.FORMAT);
NumberFormat formatter = NumberFormat.getInstance(fmtLocale);
formatter.setMaximumFractionDigits(2);
formatter.setMinimumFractionDigits(2);
System.out.println(formatter.format(d1));
System.out.println(formatter.format(d2));
System.out.println(fmtLocale.toLanguageTag());
私のマシンでは、これは次のように出力されます。
123 456,78
567 890,00
pl-PL
これがあなたが探しているものであり、パターンを台無しにする必要はないと私は信じています。私はそれをしません-たとえば、数字を3つではなく2つでグループ化するロケールがあります(これが、グループ化区切り文字およびnot千単位の区切り文字)。
フォーマットのカスタマイズ 、から適応
public void localizedFormat(double value,Locale loc ) {
NumberFormat nf = NumberFormat.getNumberInstance(loc);
DecimalFormat df = (DecimalFormat)nf;
df.applyPattern("###,###.00");
String output = df.format(value);
}
この関数は、必要なフォーマットを提供するはずです。
あなたは次のようなものを使うことができます
DecimalFormat formatter = (DecimalFormat) DecimalFormat.getInstance();
formatter.applyPattern("#,###,##0.00");
formatter.format(yourDoubleHere)
double値を10進数の後の任意の桁数のdouble値に変換します。このメソッドをUtilityクラスに作成して、プロジェクト全体でアクセスできるようにしました。
public static double convertToDecimal(double doubleValue, int numOfDecimals) {
BigDecimal bd = new BigDecimal(doubleValue);
bd = bd.setScale(numOfDecimals, BigDecimal.ROUND_HALF_UP);
return bd.doubleValue();
}