- PR -

BigDecimalの加算について

1
投稿者投稿内容
みーちく
大ベテラン
会議室デビュー日: 2002/08/29
投稿数: 131
投稿日時: 2004-06-01 23:38
みーちくです。

double型の加算をしたいので、BigDecimalのadd()メソッドを使用して、
加算したところ計算結果が、「272.79999999999995」のように
なりました。この計算結果を「272.8」のようにする場合には
どのようにしたら良いのでしょうか。
宜しくお願い致します。

コード:
import java.math.BigDecimal;

public class BigDecimalTest {

	public static void main(String[] args) {
		String[] str 	= {"95.8","54.9","122.1"};
		double sum 	= 0;
		for(int i=0; i<str.length; i++){
			double rate = Double.parseDouble(str[i]);
			sum = Sum(sum, rate);
		}
		System.out.println(sum);
	}
	
	private static double Sum(double d1, double d2){
		BigDecimal bd1 = new BigDecimal(d1);
		BigDecimal bd2 = new BigDecimal(d2);
		bd1 = bd1.add(bd2);
		return bd1.doubleValue();
	}
}

yuzy
大ベテラン
会議室デビュー日: 2002/02/14
投稿数: 117
投稿日時: 2004-06-01 23:56
Sumメソッドの引数や返り値をdoubleにしているため誤差が含まれています。
引数や返り値をdoubleにせず、BigDecimalにすれば誤差は含まれません。

ちなみにメソッド名は英小文字で始めるのが一般的です。

[ メッセージ編集済み 編集者: yuzy 編集日時 2004-06-01 23:57 ]
みーちく
大ベテラン
会議室デビュー日: 2002/08/29
投稿数: 131
投稿日時: 2004-06-02 13:21
yuzyさん

返信ありがとうございます。
また、返事が遅れてしまって、申し訳ございませんでした。

yuzyさんのご指摘の通り、返り値をBigDecimalに変更したら
ちゃんと動作いたしました。
また、メソッド名のご指摘もありがとうございました。

ありがとうございました。
1

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