2011-05-20 17 views
3

私は0.9000000000000004予期しない小数結果

なぜそれがそうであるように私は、p/oを取得しています

public class SampleDemo { 
    public static void main(String args[]) { 
     System.out.println(10.00 - 9.10); 
    } 
} 

..次のコードを実行されますが、その結果を期待していませんでしたか?

+1

そこ側のすべてのそれらの関連した質問を読みます - - > http://stackoverflow.com/questions/5076710/what-is-float -in-java –

+5

[浮動小数点演算へようこそ](http://programmers.stackexchange.com/questions/62948/what-c​​an-be-done-to-programming-languages-to-avoid-floating-point-落とし穴):) –

答えて

6

これは、10進値をfloatまたはdoubleで正確に表すことができないためです。

1つの提案:正確な回答が必要な場合は、浮動小数点数と2倍を避けてください。使用のBigDecimal、int型、または長い代わりに

のint使用

public class SampleDemo { 
    public static void main(String args[]) { 
     System.out.println(10 - 9); 
    } 
} 

// Output : 1 

のBigDecimalを使用する:

import java.math.BigDecimal; 

public class SampleDemo { 
    public static void main(String args[]) { 
    System.out.println(new BigDecimal("10.00").subtract(new BigDecimal("9.10"))); 
          } 
        } 
// Output : 0.90 
+4

この種の精度が必要な場合は、[BigDecimal](http://download.oracle.com/javase/6/docs/api/java/math/BigDecimal.html)を参照してください。スケール、丸みを帯びた政治などをより詳細に制御することができます。 –

+0

はい、@Anthony +1私は自分の答えに加えました。 :) –