如何将最大整数限制设置为三,以便第四次按下数字按钮后,显示的数字不会改变?

How to set a maximum integer limit to three so that after pushing a number button for the fourth time, the displayed number wouldn't change?

我正在尝试构建一个可以从另一个中减去 textview 的计算器。其中一个 textview 具有常量值 5。另一个 textview 在用户按下从 0 到 9 的按钮后获取其值。还有一个用于小数符号(点)的按钮。因此,例如,如果我按下按钮 4、5、.、6 和 7,textview 将显示 45.67,第三个 textview 将显示答案 (40.67)。

这个例子工作正常。但我的问题是我想将整数(点前的数字)的数量限制为三个。虽然我可以通过简单地将 setMaximumIntegerDigits 添加到 3 来做到这一点,但它并没有像我想要的那样工作。例如,如果我按 4、5 和 3,textview 会显示 453。没关系。但是,如果我再按另一个数字,例如7,它会显示537。如果我再按8,它会显示378,依此类推。

小数不存在同样的问题。所以,我的问题是,如何设置实际的整数限制,以便当我第四次按下数字时,应用程序不会更改 textview?

中的数字

代码:

public class MainActivity extends AppCompatActivity {
private TextView textResult;
private TextView textSubtractor;
private TextView textSubtractee;
private String display = "0";
private String result = "0";
private SharedPreferences mPrefs;

Button btnDone;
double num1, num2, sub;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    textResult = (TextView) findViewById(R.id.textResult);
    textSubtractor = (TextView) findViewById(R.id.textSubtractor);

    textSubtractee = (TextView) findViewById(R.id.textSubtractee);

    btnDone = (Button) findViewById(R.id.btnDone);

    textSubtractor.setText(display);
    textResult.setText(result);

    mPrefs = getSharedPreferences("test", 0);
    if (mPrefs != null){
        display = mPrefs.getString("display", "0");
        sub = mPrefs.getInt(result, 0);
    }
    updateScreen();

    btnDone.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
        }
    });
}

public void onClickNumber(View v) {

    if (v.getId() == R.id.btnDot && (display.equals("") || display.contains("."))) {
        return;
    }

    if ((v.getId() == R.id.btn0 ||
            v.getId() == R.id.btn1 || v.getId() == R.id.btn2 ||
            v.getId() == R.id.btn3 || v.getId() == R.id.btn4 ||
            v.getId() == R.id.btn5 || v.getId() == R.id.btn6 ||
            v.getId() == R.id.btn7 || v.getId() == R.id.btn8 ||
            v.getId() == R.id.btn9) && (display.equals("0"))) {
        clear();
        updateScreen();
    }

    Button b = (Button) v;
    display += b.getText();
    updateScreen();

    DecimalFormat df = new DecimalFormat("##.##");
    df.setRoundingMode(RoundingMode.FLOOR);
    df.setMaximumIntegerDigits(3);

    num1 = Double.parseDouble(display);
    textSubtractor.setText(df.format(num1));

    num2 = Double.parseDouble(textSubtractee.getText().toString());

    sub = num1 - num2;
    textResult.setText(df.format(sub));
}

public void onClickClear(View v) {
    clear();
}

private void clear() {
    display = "";
    result = "";
    textSubtractor.setText("0");
    textResult.setText("0");
}

private void updateScreen() {
    textSubtractor.setText(display);
}

对于一个简单的解决方案,我建议在按下新数字按钮时检查输入的整数和小数部分:

//Class constants
final static int INTEGER_SIZE = 3;
final static int DECIMAL_SIZE = 2;

public void buttonPressed(View v) {

    if (v.getId() == R.id.btn_dot){ // Handle dot
        if(!display.contains("."))
            display+=".";
    }else{ // Only number values reach this
        if(display.equals("0")){ // Handle default zero
            clear();
            updateScreen();
        }
        if(display.contains(".")){ //If the number contains a dot, decimal length has to be checked
            String[] split = display.split("\.");
            if(split.length==2 && split[1].length()==DECIMAL_SIZE)
                return; // New number is not added
        }else if(display.length()==INTEGER_SIZE) //Otherwise check the length of the integer (whole sting)
            return; // New number is not added

        // New number will be added
        Button b = (Button) v;
        display += b.getText();
        updateScreen();

        DecimalFormat df = new DecimalFormat("##.##");
        df.setRoundingMode(RoundingMode.FLOOR);

        num1 = Double.parseDouble(display);
        textSubtractor.setText(df.format(num1));

        num2 = Double.parseDouble(textSubtractee.getText().toString());

        sub = num1 - num2;
        textResult.setText(df.format(sub));
    }

}

在长 运行 中,您应该考虑向用户提供一些反馈,例如禁用按钮或在 UI 上显示数字的最大长度。