タイトルのすべて..、この方法ですべての Double を安全にフォーマットする方法を探しています。他の例:
1000 ==> 1.000
1500 ==> 1.500
22000 ==> 22.000
1555005 ==> 1 555.005
私はこのリンクを見まし たが、助けにはなりませんでした...
それを行う安全な方法はありますか?事前にTHX
タイトルのすべて..、この方法ですべての Double を安全にフォーマットする方法を探しています。他の例:
1000 ==> 1.000
1500 ==> 1.500
22000 ==> 22.000
1555005 ==> 1 555.005
私はこのリンクを見まし たが、助けにはなりませんでした...
それを行う安全な方法はありますか?事前にTHX
小数点としてドットとスペースを使用して、入力数値を 1000 で割って出力したいとします。安全な方法は、最初に に変換しBigDecimal
、10 -3 倍に拡大してから、を使用して印刷することDecimalFormat
です。
final DecimalFormat f = new DecimalFormat("#,###.000");
final DecimalFormatSymbols s = new DecimalFormatSymbols();
s.setGroupingSeparator(' ');
s.setDecimalSeparator('.');
f.setDecimalFormatSymbols(s);
final double input = 1_555_005;
final BigDecimal x = new BigDecimal(input).scaleByPowerOfTen(-3);
System.out.println(f.format(x));
版画
1 555.005
ここでのようにグループ化/小数点区切りを明示的に設定することは、これを行う正統な方法ではないことに注意してください: 通常、Locale 設定で数値形式を指定します。
これはここから取られます
static public void displayNumber(Locale currentLocale) {
Integer quantity = new Integer(123456);
Double amount = new Double(345987.246);
NumberFormat numberFormatter;
String quantityOut;
String amountOut;
numberFormatter = NumberFormat.getNumberInstance(currentLocale);
quantityOut = numberFormatter.format(quantity);
amountOut = numberFormatter.format(amount);
System.out.println(quantityOut + " " + currentLocale.toString());
System.out.println(amountOut + " " + currentLocale.toString());
}
この例では、次のように出力されます。同じ数値の形式がロケールによってどのように異なるかを示しています。
123 456 fr_FR
345 987,246 fr_FR
123.456 de_DE
345.987,246 de_DE
123,456 en_US
345,987.246 en_US
常に Java フォーマット API を使用してください。http://docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.htmlには、数値の書式設定に関する優れたチュートリアルがあります。
フランス語用のロケールベースのフォーマッターを入手して、次のようにフォーマットできます。
NumberFormat nf = NumberFormat.getNumberInstance(loc);
DecimalFormat df = (DecimalFormat)nf;
df.applyPattern(pattern);
String output = df.format(value);
System.out.println(pattern + " " + output + " " + loc.toString());
フランス語の場合、出力は次のようになります。
###,###.### 123 456,789 fr_FR