0

入力例:

double a = 31.3131313131313131313131313131313131131313131313131313131313131;
String value1 = String.format("N= %1$39.32f", a);
System.out.println(value1);

出力例:N = 31.3131313131310000000000000 .. ..

必要な値があるときに、プログラムが自動的にパディングするのはなぜですか?値を呼び出したいので、これをどのように制御できますか。

ありがとうございました

4

2 に答える 2

2

これは二重精度の問題です。これを見てください。

public static void main(String[] args) {
    double a = 31.3131313131313131313131313131313131131313131313131313131313131;
    System.out.println(Double.toString(a));
}

出力:

31.31313131313131

Javadoubleデータ型は、これほどの精度を保持できません。BigDecimal代わりに使用してください。

public static void main(String[] args) {
    BigDecimal a = new BigDecimal("31.3131313131313131313131313131313131131313131313131313131313131");
    System.out.println(a.toPlainString());
}

出力:

31.3131313131313131313131313131313131131313131313131313131313131
于 2013-03-10T13:12:37.013 に答える
0

adoubleは53ビットの精度しか表現できないため、これはおよそ10進数の16桁の精度です。したがって、変数aは、要求した値に最も近い表現可能な値で初期化されているだけです。

このレベルの精度が本当に必要な場合は、の使用を検討する必要がありますBigDecimal

于 2013-03-10T13:09:44.560 に答える