- PR -

doubleを使用した計算

1
投稿者投稿内容
Kira
ぬし
会議室デビュー日: 2004/10/30
投稿数: 252
投稿日時: 2005-01-03 23:59
いつもお世話になっております。

小数点以下2桁までしか使用せず計算しているにもかかわらず
なんで以下のようなことって起こるんでしょうか?
(一応doubleにキャストするようにしたのですが、、、)
また、対処方法を教えていただけないでしょうか?

========================================================
double sum = 0;

for(int int_cnt = 0;int_cnt <= 9; int_cnt++){
sum += (double)(int_cnt * 0.01);
System.out.println(sum);
}
=======================================================

結果
0.0
0.01
0.03
0.06
0.1
0.15000000000000002
0.21000000000000002
0.28
0.36000000000000004
0.45000000000000007
taro
ぬし
会議室デビュー日: 2003/10/20
投稿数: 316
投稿日時: 2005-01-04 00:03
java.math.BigDecimalを使うとかいかがでしょうか?
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-01-04 00:25
http://msugai.fc2web.com/java/class/DecimalTips.html
参考にしてみてください。
Kira
ぬし
会議室デビュー日: 2004/10/30
投稿数: 252
投稿日時: 2005-01-04 12:50
ありがとうございます。

BigDecimalを使用することで正確な答えになりました。
感謝いたします。
よしだひろゆき
大ベテラン
会議室デビュー日: 2004/11/22
投稿数: 141
投稿日時: 2005-01-06 11:04
たまたま例示されたのが簡単なケースだったのかもしれませんが,
たかが小数2桁の計算をするのに,誤差にびくついてBigDecimalを使うのはどうかと思います.

BigDecimalは算術演算子(+-*/)が使えなくて,addやdivideを使うコーディングになるので著しくソースが読みにくくなります.

例示されている程度の計算処理であれば,有効桁数に注意しながら,最終結果を丸めて表示すれば済むと思います.
例えば:
NumberFormat nf = NumberFormat.getInstance();
System.out.println(nf.format(sum));
1

スキルアップ/キャリアアップ(JOB@IT)