2017-03-24 7 views
1

文字列12345678911234567を解析して2倍にすると予期しない結果になる。 数値が1234567891123456を超えるとDecimalFormatの解析エラーが発生する

double convertedNum = 0; 
convertedNum = new DecimalFormat().parse(12345678911234567).doubleValue(); 

の下に変換結果が1.2345678911234568E16 だったが、私はそれが1.2345678911234567E16だった期待、そして私も

double convertedNum = 0; 
BigDecimal bgNum = null; 
bgNum = new BigDecimal(12345678911234567); 
convertedNum = bgNum.doubleValue(); 

以下のように変換するためにはBigDecimalを使用しようと、私は同じでしょうコードを使用します結果、私はこれを引き起こす原因を見つけることができません。 誰かが私にいくつか示唆を与えることができます、ありがとう。

new BigDecimal("12345678911234567"); 

ようBigDecimalのコンストラクタをString引数で(ちょうど約)合理的な大きさの数を扱うことができます -

答えて

0

私の最高の提案はBigDecimalコンストラクタで引用符で番号を置くことです。

doubleにすべての大きな数値を正しく格納できるわけではありません。あなたが表現しようとしている数字が2つの値の間に入るかもしれないようです。しかし、BigDecimalは確かにそれを正しく表すことができます。

更新

私の最後の段落を明確にするためには、12345678911234567に等しい何doubleはありません。 12345678911234566に等しいdoubleがありますが、次のdouble12345678911234568に等しくなります。したがって、12345678911234567doubleに格納しようとすると、12345678911234568に切り上げられます。

+0

ご返信ありがとうございますが、私はダブルタイプで保存する必要があります。だから、BigDecimal doubleValue()を使って解析しますが、結果も1.2345678911234568E16です。 – kingaffery

+0

@kingaffery私の更新が、あなたが求めていることが不可能である理由を明確にすることを願っています。 –

関連する問題