2017-08-24 8 views
1
double d = 1000000000138719341D; 
System.out.print(Double.valueOf(d).longValue()); 

を生成しない印刷結果が、なぜそれが違うダブル大きな値の長い変換に同じ値

1000000000138719360 

のですか?そして、どうすれば正しい結果が得られますか? docsから

+0

が必要ですか? –

+0

正しい値は1000000000138719341 – user8506034

+2

であるべきです。 'double'は、15〜16桁の有効桁を確実に保持するだけです。 http://www.adambeneschan.com/How-Does-Floating-Point-Work/showfloat.php?floatvalue=1000000000138719341&floattype=double – ajb

答えて

1

ダブル:ダブルデータ型は、倍精度64ビットIEEE 754 浮動小数点です。値の範囲はこの の範囲を超えていますが、Java言語仕様のFloating-Point Types, Formats, and Values セクションで指定されています。小数値の場合、 このデータ型は通常はデフォルトの選択です。上記のように、 このデータ型は、正確な値(たとえば、 通貨)には使用しないでください。

1

あなたは "正しい" 結果である何java.math.BigDecimalクラス

関連する問題