2012-02-09 29 views
0

にdouble値を追加している:間違い、私は次のコードを持っているのjava

double d1=1000000000000000000.0; //which is equivalent to 1.0e^18 
double d2=3434.0; 
System.out.println(d1+d2); 

問題は何の代わり1000000000000003434.の1000000000000003460を出力しますか?

+5

ダブルには必要な精度がありません。有効数字が足りません。 –

+0

@AnthonyPegram - あなたが正しいので、答えではなく、コメントにしてください。 – Paul

+0

@AnthonyPegram - また、代替案を提供しています。 – Mob

答えて

3

@Anthony Pegramが正しいです。このような精度が必要な場合は、BigDecimalを使用します。

3

問題はダブルタイプそのものであり、必要な精度をサポートしていません。 BigDecimalを使うべきです。

+1

ちょうど興味がありますが、なぜ彼は予想よりも大きな結果を得ていますか?精度が不足すると丸め誤差が発生しますか? – MGZero

+0

はい、精度が不足しています。 double型は任意の32ビット整数を表すために使用できますが、これを超えると、特定の非常に大きな値を表現することはできますが、精度は低くなります。 – belgther

0

必要な記憶域の数が予想を超えています。このような場合はBIG Decimalを使用してください。

import java.math.BigDecimal;//remember to import this 
    public class UseBigDecimal{ 

    public static void main(String[]args){ 
    double d1=1000000000000000000.0; 
    double d2=3434.0; 

    BigDecimal bVal1 = new BigDecimal(d1); 
    BigDecimal bVal2 = new BigDecimal(d2); 

    BigDecimal sum = bVal1.add(bVal2);//you call the add() method not bVal1+bVal2 
    System.out.println ("Sum of BigDecimals " +sum.toString()); 
    //need to call toString() 
    } 

    } 
関連する問題