自动将十进制值添加到EditText中的数字

时间:2015-04-05 21:04:09

标签: android android-activity

我有一个EditText,用户想要输入价格。为了保持一致性,我决定自动包含小数值。

例如"1" entered by user would become "1.00"

现在,在使用效率低下的代码之后,我可以在StackOverFlow中找到更好的代码

    amountEditText.setRawInputType(Configuration.KEYBOARD_12KEY);
amountEditText.addTextChangedListener(new TextWatcher() {
    public void afterTextChanged(Editable s) {}
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

    public void onTextChanged(CharSequence s, int start, int before, int count) {
        if(!s.toString().matches("^\\$(\\d{1,3}(\\,\\d{3})*|(\\d+))(\\.\\d{2})?$"))
        {
            String userInput= ""+s.toString().replaceAll("[^\\d]", "");
            StringBuilder cashAmountBuilder = new StringBuilder(userInput);

            while (cashAmountBuilder.length() > 3 && cashAmountBuilder.charAt(0) == '0') {
                cashAmountBuilder.deleteCharAt(0);
            }
            while (cashAmountBuilder.length() < 3) {
                cashAmountBuilder.insert(0, '0');
            }
            cashAmountBuilder.insert(cashAmountBuilder.length()-2, '.');
            cashAmountBuilder.insert(0, '$');

            amountEditText.setText(cashAmountBuilder.toString());
            // keeps the cursor always to the right
            Selection.setSelection(amountEditText.getText(), cashAmountBuilder.toString().length());

        }

    }
});

使用上面的代码,一旦用户开始输入数字,就会开始包含十进制值。但是,用户添加的数值将显示为$ symbol。因此,我对第07行中的代码进行了一些修改,删除了第19行。

新代码

        returnPrice.setRawInputType(Configuration.KEYBOARD_12KEY);
    returnPrice.addTextChangedListener(new TextWatcher() {
        public void afterTextChanged(Editable s) {}
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if(!s.toString().matches("^(\\d{1,3}(\\,\\d{3})*|(\\d+))(\\.\\d{2})?$"))
            {
                String userInput= ""+s.toString().replaceAll("[^\\d]", "");
                StringBuilder cashAmountBuilder = new StringBuilder(userInput);

                while (cashAmountBuilder.length() > 3 && cashAmountBuilder.charAt(0) == '0') {
                    cashAmountBuilder.deleteCharAt(0);
                }
                while (cashAmountBuilder.length() < 3) {
                    cashAmountBuilder.insert(0, '0');
                }
                cashAmountBuilder.insert(cashAmountBuilder.length()-2, '.');

                returnPrice.setText(cashAmountBuilder.toString());
                // keeps the cursor always to the right
                Selection.setSelection(returnPrice.getText(), cashAmountBuilder.toString().length());

            }
        }
    });

我的问题

因此,我在02中遇到的问题是,当我在EditText中输入数值时 - 除非输入小数点,否则EditText中的数值将显示为整数。

例如:案例01

为了在打字时显示100.00,值开始显示为0.01美元,然后是0.10美元,然后是1.00美元,10.00美元,最后是100.00美元。在任何情况下,在这种情况下我都不需要手动输入小数点。

例如:案例02

为了在我打字时显示100.00,值开始显示为1,然后是10,然后是100.现在,如果我按下软键盘上的小数点,则100变为1.00,输入值变为10.00,最后100.00。如果键盘上未触及小数点,则输入10000时的结果值为10000而不是100.00。

我犯的错误是什么?有什么建议吗?

0 个答案:

没有答案