2

計算機の作成に取り組んでいますが、数値の後に小数部分を表示する際に問題があります。電卓のキーは 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 になります。それをするために何かを提案し、私が間違っているところを教えてください。

4

3 に答える 3

1

必要に応じてフォーマットするには、 DecimalFormatを使用する必要があります。

double d = 1.234567;
DecimalFormat df = new DecimalFormat("#.00");
System.out.print(df.format(d));
于 2013-06-12T09:43:36.940 に答える
1

フォーマッターを使用して 10 進数値をフォーマットする

DecimalFormat df = new DecimalFormat("#.0");
于 2013-06-12T09:44:23.050 に答える