ここから本文です

JavaのBigDecimalからdoubleへ変換する際の誤差について教えて下さい。 都合に...

jbh********さん

2015/12/423:16:39

JavaのBigDecimalからdoubleへ変換する際の誤差について教えて下さい。

都合によりBigDecimalからdoubleへ変換しなければならなくなりました。

誤差が発生する可能性があるようなのですが、
例えばBigDecimalの値が小数点以下1桁の値でも
誤差が発生する可能性があるものなのでしょうか?
BigDecimal("0.1").doublevalue()の結果が 0.0999…になる可能性があるか?
ということです("0.1"はあくまで例です)。

もし小数点以下1桁なら誤差は発生しないということでしたら
doubleに変換しても誤差が発生しないようなBigDecimalの値の範囲というものが
あるのだと思いますのでその範囲を教えて頂けないでしょうか?

桁により範囲が決まるのでしたら、
整数部が○桁で小数部が○桁までならdoubleに変換しても誤差は発生しない。
というように教えて頂けると有難いです。

補足lonelywolf_67さん、回答ありがとうございます。
double型で0.1が正確に表せないことは理解できました。
すみませんが、もうひとつご教授ください。
eclipseで試してみたのですが、
以下のソースの①、②でdouble型の変数の値が 0.09999…でなく
0.1 と表示されるのは何故なのでしょうか?

BigDecimal big = new BigDecimal("0.1");
double dbl = big.doubleValue();
⇒① eclipseで「dbl」の値を見ると 0.1

double dbl = 0.1;
⇒② eclipseで「dbl」の値を見ると 0.1

double dbl = 1 - 0.9;
⇒③ eclipseで「dbl」の値を見ると、 0.09999999999999998

閲覧数:
5,437
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

lon********さん

2015/12/505:11:51

BigDecimal から変換するとか以前の問題で、
double では 0.1 を厳密に表すことができません。
なので、0.1 を double に入れる時点で誤差は発生します。

double d = 0.1;
でもダメです。

参考:http://msugai.fc2web.com/java/class/DecimalTips.html

つまり、1桁でも小数を含むのであれば誤差は発生する
可能性があるということです。

この回答は投票によってベストアンサーに選ばれました!

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる