- - PR -
doubleを使用した計算
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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 |
|
投稿日時: 2005-01-04 00:03
java.math.BigDecimalを使うとかいかがでしょうか?
|
|
投稿日時: 2005-01-04 00:25
http://msugai.fc2web.com/java/class/DecimalTips.html
参考にしてみてください。 |
|
投稿日時: 2005-01-04 12:50
ありがとうございます。
BigDecimalを使用することで正確な答えになりました。 感謝いたします。 |
|
投稿日時: 2005-01-06 11:04
たまたま例示されたのが簡単なケースだったのかもしれませんが,
たかが小数2桁の計算をするのに,誤差にびくついてBigDecimalを使うのはどうかと思います. BigDecimalは算術演算子(+-*/)が使えなくて,addやdivideを使うコーディングになるので著しくソースが読みにくくなります. 例示されている程度の計算処理であれば,有効桁数に注意しながら,最終結果を丸めて表示すれば済むと思います. 例えば: NumberFormat nf = NumberFormat.getInstance(); System.out.println(nf.format(sum)); |
1