【问题标题】:Unable to input zero after decimal point in Android EditText无法在 Android EditText 中的小数点后输入零
【发布时间】:2012-09-14 21:29:53
【问题描述】:

我有一个 Android EditText,当用户输入数字时,它会编辑数字并使用十进制格式添加千位分隔符,但是当输入浮点数时,我不会在小数点后添加零。所以我不能输入 1.000000008 因为零不会继续,但其他数字会。 是否有任何 java DecimalFormat 模式允许用户在小数点后输入零? 这是我的 EditText 的代码。

am = new TextWatcher(){
                 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().contains(String.valueOf(df.getDecimalFormatSymbols().getDecimalSeparator())))
                        {
                            hasFractionalPart = true;
                        } else {
                            hasFractionalPart = false;
                        }
                 }
                public void afterTextChanged(Editable s) {
                    amount.removeTextChangedListener(this);
                    amount2.setText(s.toString());
                try {
                    int inilen, endlen;
                    inilen = amount.getText().length();

                    String v = s.toString().replace(String.valueOf(df.getDecimalFormatSymbols().getGroupingSeparator()), "");
                    Number n = df.parse(v);
                    value = Double.parseDouble(v);
                    int cp = amount.getSelectionStart();
                    if (hasFractionalPart) {
                        amount.setText(df.format(n));
                    } else {
                        amount.setText(dfnd.format(n));
                    }
                    endlen = amount.getText().length();
                    int sel = (cp + (endlen - inilen));
                    if (sel > 0 && sel <= amount.getText().length()) {
                        amount.setSelection(sel);
                    } else {
                        // place cursor at the end?
                        amount.setSelection(amount.getText().length() - 1);
                    }
                } catch (NumberFormatException nfe) {
                    // do nothing?
                } catch (ParseException e) {
                    // do nothing?
                }
               amount.addTextChangedListener(this);

               }
            };

【问题讨论】:

    标签: android android-layout android-edittext


    【解决方案1】:

    重写

    首先,当出现十进制符号时,让我们计算格式化程序将修剪掉多少个零。 (如果我们在小数点后发现一个非零字符,我们将重置我们的计数。例如,1.00200 只有两个尾随零。)在onTextChanged()

    int index = s.toString().indexOf(String.valueOf(df.getDecimalFormatSymbols().getDecimalSeparator()));
    trailingZeroCount = 0;
    if (index > -1)
    {
        for (index++; index < s.length(); index++) {
            if (s.charAt(index) == '0')
                trailingZeroCount++;
            else {
                trailingZeroCount = 0;
            }
        }
    
        hasFractionalPart = true;
    } else {
        hasFractionalPart = false;
    }
    

    接下来, 将适当数量的零附加到格式化的字符串上。在afterTextChanged():

    if (hasFractionalPart) {
        StringBuilder trailingZeros = new StringBuilder();
        while (trailingZeroCount-- > 0)
            trailingZeros.append('0');
        amount.setText(df.format(n) + trailingZeros.toString());
    } else {
        amount.setText(dfnd.format(n));
    }
    

    注意:您尚未发布您使用的格式,因此我不得不做出一些假设,但这很容易适应。

    【讨论】:

    • 谢谢,但也许我的问题表述有误......我的问题是我不能在小数点后输入零。所以我不能写 1.0003 它只是变成 1.3 如果我按照你的建议做它永远是 1.03 我希望能够在小数点后输入零
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    相关资源
    最近更新 更多