-1

重複の可能性:
Java で Double を使用して精度を保持
する double で小数点以下の桁数を移動する

クラスはそれ自体を物語っています。このコードを実行すると、double 値が多少オーバーフローするように見えますが、すべての値で発生するわけではありません。さらに、数値を直接出力すると、出力は問題ありません。

public class test {
    public static void main(String[] args){

        for (double f=1.36; f<1.40; f+=0.01) System.out.println(f); 
             //Prints 1.36
             //       1.37
             //       1.3800000000000001   ???????
             //       1.3900000000000001   ???????

            System.out.println(1.36); //Prints 1.36
            System.out.println(1.37); //Prints 1.37
            System.out.println(1.38); //Prints 1.38
            System.out.println(1.39); //Prints 1.39
    }
}

誰かが光を当てることができますか?これがバグである場合、コードで修正する最善の方法は何ですか?? 魔法の回避策はありますか?

4

2 に答える 2

2

印刷出力を次のようにフォーマットすると、小数点以下の桁数がすべて表示されなくなります。

System.out.printf("%.2f",yourVariable);
于 2012-05-16T17:06:56.367 に答える
1

試す

for (int i= 136; i <= 140; i++) 
    System.out.println(i / 100.0);

プリント

1.36
1.37
1.38
1.39
1.4

ダブルを印刷すると、表示エラーが補正されるため、表示されません。浮動小数点値に対して複数の算術演算を実行すると、丸め誤差も追加されるリスクがあります。これは明らかになります(修正する必要があります)。

于 2012-05-16T17:18:10.253 に答える