Android计算器应用小数结果

时间:2016-01-23 06:31:08

标签: java android

我是Mikamocha,我刚刚开始编写Android应用程序。我的第一个计算器应用程序(结果)有问题。我的意思是2 + 2将是4而不是4.0,5-2将是3而不是3.0等。

package com.yeshua.mikamocha.myxcalculator;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


public class MainActivity extends AppCompatActivity {
    private EditText Scr;
    private float NumberBf=0, NumAf, result=0;
    private String Operation, mod="replace";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Scr = (EditText) findViewById(R.id.txtScreen);
        Scr.setText("");
        int idList[] = {R.id.btn0, R.id.btn1, R.id.btn2, R.id.btn2, R.id.btn3, R.id.btn4,
                R.id.btn5, R.id.btn6, R.id.btn7, R.id.btn8, R.id.btn9,
                R.id.btnAdd, R.id.btnSubtract, R.id.btnMultiply, R.id.btnDivide,
                R.id.btnClear,R.id.btnEquals, R.id.btnDot, };
        for(int id:idList) {
            View v = (View) findViewById(id);
            v.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    onButtonClick(v);
                }
            });
        }
    }
    public void mMath(String str) {
        mResult();
        try {
            NumberBf = Float.parseFloat(Scr.getText().toString());
            Operation = str;
        }catch (Exception e) {
            Toast.makeText(getApplicationContext(), (CharSequence) e, Toast.LENGTH_SHORT).show();
            Scr.setText("SYNTAX ERROR");
            mod = "replace";
        }
        }

    public void mResult() {
        NumAf = 0;
        if(!Scr.getText().toString().trim().isEmpty())
            NumAf = Float.parseFloat(Scr.getText().toString());
        result = NumAf;

        try {
            switch (Operation) {
                case "+":
                    result = NumAf + NumberBf;
                    break;
                case "-":
                    result = NumberBf - NumAf;
                    break;
                case "*":
                    result = NumAf * NumberBf;
                    break;
                case "/":
                    result = NumberBf / NumAf;
                    break;
                default:
                    result = NumAf;
                    break;
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        Scr.setText(String.valueOf(result));
        mod = "replace";
    }
    public void getKeyboard(String str) {
        String ScrTxt = Scr.getText().toString();
        ScrTxt += str;
        if(mod.equals("add"))
            Scr.setText(ScrTxt);
        else
            Scr.setText(str);
        mod = "add";
    }

    public void onButtonClick(View v) {
        switch (v.getId()) {
            case R.id.btnClear: //Clear
                Scr.setText("");
                NumberBf = 0;
                Operation = "";
                break;case R.id.btnAdd:
                mMath("+");
                break;
            case R.id.btnSubtract:
                if(mod.equals("replace")) {
                    String numb = ((Button) v).getText().toString();
                    getKeyboard(numb);
                }
                else mMath("-");
                break;
            case R.id.btnMultiply:
                mMath("*");
                break;
            case R.id.btnDivide:
                mMath("/");
                break;
            case R.id.btnEquals:
                mResult();
                Operation = "";
                NumberBf = 0;
                break;
            default:
                String numb = ((Button) v).getText().toString();
                getKeyboard(numb);
                break;
        }
    }

}

感谢。

3 个答案:

答案 0 :(得分:1)

您应该使用NumberFormat。 例如:

public static void main(String[] args) {
        System.out.println(format(14.0184849945)); // prints '14.01'
        System.out.println(format(13)); // prints '13'
        System.out.println(format(3.5)); // prints '3.5'
        System.out.println(format(3.138136)); // prints '3.13'
}
public static String format(Number n) {
        NumberFormat format = DecimalFormat.getInstance();
        format.setRoundingMode(RoundingMode.FLOOR);
        format.setMinimumFractionDigits(0);
        format.setMaximumFractionDigits(2);
        return format.format(n);
}

答案 1 :(得分:0)

您正在使用float result数据类型,而不是在int中使用int类型和解析操作值。

result = (int)(NumAf + NumberBf);

答案 2 :(得分:0)

参考。 DecimalFormat

当您使用float时,如下所示进行更改,因为您将获得小数,因此请使用int,

private int result=0;

//and 

result =(int) (NumAf + NumberBf);

float one= 2.0;
float two= 2.5;
//DecimalFormat format = new DecimalFormat();
//format.setDecimalSeparatorAlwaysShown(false);

DecimalFormat format=new DecimalFormat("#,###.#");

 System.out.println( format.format(one) );//prints 2
 System.out.println( format.format(two) );//prints 2.5