- PR -

BigDecimalを使った割り算について

1
投稿者投稿内容
みーむ
ベテラン
会議室デビュー日: 2003/10/13
投稿数: 56
投稿日時: 2006-04-27 18:12
お世話になります。
とても、初歩的な質問で申し訳ないのですが、
BigDecimalを使った割り算について教えてください。

環境:jdk1.5.0_03

"6148/3145728"を求めたく、以下のようにコード
してみたのですが、例外が発生してしまい、
うまく計算できずにいます。
BigDecimal arg1 = new BigDecimal(6148);
BigDecimal arg2 = new BigDecimal(3145728);
BigDecimal result = arg1.divide(arg2);

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.

BigDecimalは全然不慣れなのですが、記述に問題などありましたら
教えていただけないでしょうか?
kuma
大ベテラン
会議室デビュー日: 2004/02/25
投稿数: 110
投稿日時: 2006-04-27 18:31
引用:

みーむさんの書き込み (2006-04-27 18:12) より:
お世話になります。
とても、初歩的な質問で申し訳ないのですが、
BigDecimalを使った割り算について教えてください。

環境:jdk1.5.0_03

"6148/3145728"を求めたく、以下のようにコード
してみたのですが、例外が発生してしまい、
うまく計算できずにいます。
BigDecimal arg1 = new BigDecimal(6148);
BigDecimal arg2 = new BigDecimal(3145728);
BigDecimal result = arg1.divide(arg2);

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.

BigDecimalは全然不慣れなのですが、記述に問題などありましたら
教えていただけないでしょうか?



手元にjdk1.5.0がないので1.4.2のJavaDocみながらですが
「丸めモード」はどうなってます?
指定しない場合ROUND_UNNECESSARY辺りになってませんか?
みーむ
ベテラン
会議室デビュー日: 2003/10/13
投稿数: 56
投稿日時: 2006-04-27 19:06
kumaさん、早速のお返事ありがとうございます。

jdk1.5のjavadocにはdivide(BigDecimal divisor)の
丸めモードの記述は見つけられなかったのですが、
改めて丸めモードを明示して指定してみたところ、
欲しかった値を得ることができました。

BigDecimal result =arg1.divide(arg2,5,BigDecimal.ROUND_HALF_DOWN);

とても初歩的な質問にも関わらず、親切なアドバイス
本当に感謝しております。
有難うございます。
1

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