double d = 1000000000138719341D;
System.out.print(Double.valueOf(d).longValue());
を生成しない印刷結果が、なぜそれが違うダブル大きな値の長い変換に同じ値
1000000000138719360
のですか?そして、どうすれば正しい結果が得られますか? docsから
double d = 1000000000138719341D;
System.out.print(Double.valueOf(d).longValue());
を生成しない印刷結果が、なぜそれが違うダブル大きな値の長い変換に同じ値
1000000000138719360
のですか?そして、どうすれば正しい結果が得られますか? docsから
:
ダブル:ダブルデータ型は、倍精度64ビットIEEE 754 浮動小数点です。値の範囲はこの の範囲を超えていますが、Java言語仕様のFloating-Point Types, Formats, and Values セクションで指定されています。小数値の場合、 このデータ型は通常はデフォルトの選択です。上記のように、 このデータ型は、正確な値(たとえば、 通貨)には使用しないでください。
あなたは "正しい" 結果である何java.math.BigDecimal
クラス
が必要ですか? –
正しい値は1000000000138719341 – user8506034
であるべきです。 'double'は、15〜16桁の有効桁を確実に保持するだけです。 http://www.adambeneschan.com/How-Does-Floating-Point-Work/showfloat.php?floatvalue=1000000000138719341&floattype=double – ajb