4

datatype: doubleに奇妙な問題があります。

これが私のコードです:

public class Example {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        double a = 1.0;
        for(int i =0; i<10;i++){
            System.out.println("Number => " + a );
            a += 0.1;
        }
    }

}

出力は次のようになります。

Number => 1.0
Number => 1.1
Number => 1.2
Number => 1.3
Number => 1.4
Number => 1.5
Number => 1.6
Number => 1.7
Number => 1.8
Number => 1.9

ただし、このコード サンプルの結果は次のとおりです。

Number => 1.0
Number => 1.1
Number => 1.2000000000000002
Number => 1.3000000000000003
Number => 1.4000000000000004
Number => 1.5000000000000004
Number => 1.6000000000000005
Number => 1.7000000000000006
Number => 1.8000000000000007
Number => 1.9000000000000008

eclipse を使用して、このコード ブロックをコンパイルします。netbeans で試してみましたが、何も変わりませんでした。

どのように起こるべきですか?何か案は?

よろしく

4

2 に答える 2

1

それほど簡単ではありません。Commons-Math を使用します

for (int i = 0; i < 10; i++) {
    a = Precision.round(a, 1);   // <- round to 1 digit after decimal point
    ...

それに代わる唯一のJava SEは

a = Double.parseDouble(String.format(Locale.US, "%.1f", a));
于 2013-05-30T14:14:29.160 に答える