1

ユーザーが数値を入力すると、数値を編集し、10 進形式を使用して千単位の区切り記号を追加する 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);

               }
            };
4

1 に答える 1

1

リライト

まず、小数点記号が存在する場合、フォーマッタによって削除されるゼロの数を数えましょう。(小数点の後にゼロ以外の文字が見つかった場合は、カウントをリセットします。たとえば、1.00200末尾のゼロは 2 つだけです。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));
}

注: 使用する形式を投稿していないため、いくつかの仮定を行う必要がありましたが、これは簡単に適応できます。

于 2012-09-22T22:05:18.040 に答える