【お題】NEW演歌

プログラミングに関する知識が皆無の初心者です。
「はじめてのandroidアプリプログラミング」という本に従って電卓のアプリを作っているのですが、小数点を含む計算ができず、困っております。


演算記号前の数字が小数で、演算記号後の数字が整数であるならば 1.5*2=3 と正しく計算ができますが、
演算記号後が小数点を含む数だと、計算されず演算記号後に入力した数字が 2*1.5=1.5 と、そのまま表示されてしまいます。

小数の表示は

if (mOp == R.id.button_decimal || mCalcValue.scale() != 0) {
 // 小数点を含む場合
 BigDecimal bd = new BigDecimal(BigInteger.valueOf(value),mCalcValue.scale() + 1);
 mCalcValue = mCalcValue.add(bd);
} else {
 // それ以外の場合
 // 10倍
 mCalcValue = mCalcValue.multiply(BigDecimal.TEN);
 // 足す
 mCalcValue = mCalcValue.add(new BigDecimal(value));
}

で、


イコールを押したときの動作は

public void onEqualClick(View view) {
 switch (mOp) {
  case R.id.button_plus:
  // 足し算
  mCalcValue = mPreValue.add(mCalcValue);
  break;
  case R.id.button_subtract:
  // 引き算
  mCalcValue = mPreValue.subtract(mCalcValue);
  break;
  case R.id.button_multiply:
  // かけ算
  mCalcValue = mPreValue.multiply(mCalcValue);
  break;
  case R.id.button_divide:
  // 現在の値が0ではないかチェック
  if (!BigDecimal.ZERO.equals(mCalcValue)) {
   // 割り算
   mCalcValue = mPreValue.divide(mCalcValue, 11,
   BigDecimal.ROUND_HALF_UP);
  }
 break;
}

です。


どこのコードが原因かもわからず、どこを質問文に掲示すればアドバイスいただきやすいかもわからなかったため、質問文に不足あるかもしれません。
すみませんがよろしくお願いします。

A 回答 (1件)

Android はわかりませんが 1つ気になった.



2*1.5=
と押したとき, 最後の「=」の時点で mOp の値が (R.id.button_multiply ではなく) R.id.button_decimal になってたりしませんか?

この回答への補足

あああ、なるほど!
演算記号後に押された小数点が演算記号として処理されてしまっているんですね!

そこまではわかったのですが、どこをどう直せばいいのかさっぱりわかりません…
とりあえずありがとうございます!

補足日時:2012/09/20 14:22
    • good
    • 0
この回答へのお礼

できましたー!

public void onDecimalClick(View view) {
mOp = view.getId();
}

になっていたので、おっしゃっていたとおりmOpの値がbutton_decimalになっていたようです。

mOpではない文字に定義して、if の部分をなおしたらちゃんと計算できました。

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

お礼日時:2012/09/20 14:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報