計算機の作成に取り組んでいますが、数値の後に小数部分を表示する際に問題があります。電卓のキーは 1,2,3,4,5,6,7,8,9,0,00 と 1 つのバックスペース キーです。
1を押すと、0.01が表示されます
次にオンプレス 2 o/p 0.12
次にオンプレス 3 o/p 1.23
そのように、画面に数字を追加します。以下は、このタスクを実行するために使用しているコードです
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.number1:
calcValue(.01);
break;
case R.id.number2:
calcValue(.02);
break;
case R.id.number3:
calcValue(.03);
break;
case R.id.number4:
calcValue(.04);
break;
case R.id.number5:
calcValue(.05);
break;
case R.id.number6:
calcValue(.06);
break;
case R.id.number7:
calcValue(.07);
break;
case R.id.number8:
calcValue(.08);
break;
case R.id.number9:
calcValue(.09);
break;
case R.id.number0:
enteredAmt = enteredAmt * 10.0 +(.0 * 100)/ 100.0;
roundEnteredPrice();
roundMyData(enteredAmt,2);
System.out.println("enteredAmt before:"+enteredAmt);
enteredAmt = (enteredAmt*100.0)/100.0;
System.out.println("enteredAmt after:"+enteredAmt);
valueEnteredTextview.setText(""+enteredAmt);
break;
case R.id.number00:
enteredAmt = enteredAmt * 100.0 + Math.floor(.0 * 100)/ 100.0;
roundEnteredPrice();
roundMyData(enteredAmt,2);
System.out.println("enteredAmt before:"+enteredAmt);
enteredAmt = (enteredAmt*100.0)/100.0;
System.out.println("enteredAmt after:"+enteredAmt);
valueEnteredTextview.setText(""+enteredAmt);
break;
case R.id.backspaceButton:
enteredAmt = 0.00;
valueEnteredTextview.setText("$" +0.00);
break;
}
private void calcValue(double d) {
enteredAmt = enteredAmt + Math.floor(d * 100)/ 100.0;
System.out.println("enteredAmt befor:"+enteredAmt);
enteredAmt = (Math.floor(enteredAmt*100.0)/100.0);
System.out.println("enteredAmt after:"+enteredAmt);
valueEnteredTextview.setText(""+enteredAmt);
}
private void roundEnteredPrice() {
BigDecimal bd = new BigDecimal(enteredAmt);
BigDecimal res = bd.setScale(2, RoundingMode.FLOOR);
System.out.println("Big Decimal" + res.toPlainString());
double entered = Double.parseDouble(res.toPlainString());
System.out.println("Entered Amount: "+entered);
}
private void roundMyData(double enteredAmt2, int numberOfDigitsAfterDecimal) {
double p = (float)Math.pow(10,numberOfDigitsAfterDecimal);
enteredAmt2 = enteredAmt2 * p;
double tmp = Math.floor(enteredAmt2)/p;
System.out.println("~~~~~~tmp~~~~~"+tmp);
今私の問題は、最後に入力されたゼロが表示されなかったことです 。1,2,0 を入力した場合、表示される期待値は 1.20ですが、1.2 と表示されます 。次の数字を押すと、4 を押して出力するようにゼロが表示されます。は 12.04 です
Big Decimal でも試してみましたが、ゼロが得られますが、1,0,2,0 を入力すると期待値が 10.20 になることがありますが、値は 10.19 になります。それをするために何かを提案し、私が間違っているところを教えてください。