0

小数点以下 2 桁 (つまり 123.00) の double を返したい。以下はコードの一部です。出力は常に 123.0 です。小数点以下2桁を取得するには?

public static double getPrice(){

    double price = Double.valueOf(showInputDialog("Stock's price : "));

    DecimalFormat rounded = new DecimalFormat("###.00");

    double newPrice = Double.valueOf(rounded.format(price));
    System.out.println(newPrice);

    return newPrice;
}
4

2 に答える 2

3

関数の戻り値の型が である限りdouble、短い答えは「できません」です。

10 進数が 2 桁以下の多くの数値は、 として正確に表すことができませんdouble。一般的な例の 1 つが0.1. それに最もdouble近いのは0.100000000000000005551115...

どれだけ四捨五入しても、正確に を取得することはできません0.1

オプションに関する限り、次のことができます。

  1. の使用に関連する丸めの問題を受け入れdoubleます。
  2. 戻りint値 (つまり、丸められた値に 100 を掛けたもの);
  3. を返しStringます。
  4. を返しますBigDecimal

特に、金額を表している場合、 を使用することdoubleはほぼ間違いなく悪い考えです。

于 2013-03-17T07:44:51.013 に答える
1

フォーマットするときは、double から文字列を作成しています。フォーマットされた文字列を再度 double に変換しないでください:

String formattedPrice = rounded.format(price);
System.out.println(formattedPrice); // prints 123.00 or 123,00, depending on your locale

doubleは、IEEE754 に従って数値を保持します。書式設定情報は保持せず、IEEE754 の倍精度で許容される精度のみです。コンマの後の桁数などのレンダリング情報を保持する必要がある場合は、BigDecimalなどの別のものが必要です。

于 2013-03-17T07:37:54.253 に答える