2016-09-08 8 views
-3

最大小数点の桁数を4、 に設定しましたが、N.doublevalue()の出力が1234.56789999999 ではなく1234.5679であるのはなぜですか?Java:Parse NumberFormatオブジェクト

try{ 
    NumberFormat NF = NumberFormat.getInstance(); 
    NF.setMaximumFractionDigits(4); 
    NF.setMinimumFractionDigits(3); 
    Number N = NF.parse("1234.56789999999"); 
    System.out.println(N.doubleValue()); 
    System.out.println(NF.format(1234.567899999)); 
    } 

    catch(ParseException e){e.printStackTrace();} 
    } 
+0

本来の書式設定を持たない 'double'を印刷しているだけなので、 –

+0

あなたの具体的な要件は何ですか?正確な丸めを行うには、BigDecimalを使用する必要があります。 – marthursson

+0

このリンクを参照すると、正確なアイデアが得られますhttp://stackoverflow.com/questions/50532/how-do-i-format-a-number-in-java – Santhucool

答えて

0

N.doubleValue()は、実際doubleにごNumberに変換します。 double型は基本型であり、丸めをサポートしていません。メモリに書き込まれた生の浮動小数点型の値です。それを変換しようとする正確な値を持たないので、代わりに可能な値doubleの場合つまり、doubleには、メモリが限られているため、唯一可能なすべての値がありません。ダブルデータ型は、倍精度の64ビットIEEE 754浮動小数点です。精度(ドット後の場所)が大きい小さい値の場合はdouble、大きい場合は小さい値です。非常に大きなdoubleの数字は、ドットの後にも精度を持っていません。 floatと同じですが、floatの精度はdoubleよりはるかに低くなります。

+0

ありがとう、私はそれを持っています! –

関連する問題