1

タイトルのすべて..、この方法ですべての Double を安全にフォーマットする方法を探しています。他の例:

1000 ==> 1.000

1500 ==> 1.500

22000 ==> 22.000

1555005 ==> 1 555.005

私はこのリンクを見まし たが、助けにはなりませんでした...

それを行う安全な方法はありますか?事前にTHX

4

3 に答える 3

3

小数点としてドットとスペースを使用して、入力数値を 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 設定で数値形式を指定します。

于 2012-11-17T18:58:36.973 に答える
2

これはここから取られます

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
于 2012-11-17T19:00:42.273 に答える
0

常に 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
于 2012-11-17T19:01:30.950 に答える