簡體   English   中英

限制 EditText 中的小數位數

[英]Limit Decimal Places in EditText

我正在使用 EditText 字段,用戶可以在其中指定金額。

我將 inputType 設置為 numberDecimal 可以正常工作,除了這允許輸入諸如 123.122 之類的數字,這對於金錢來說並不完美。

我寫了一些自定義的 InputFilter 方法,它的工作原理是這樣的。用戶可以在 dot-2 之前和 dot-2 之后使用 5 個元素,但不能正常工作我的目標是:

1) 使用時應輸入最大9999.99

2)如果用戶從0開始,第二個元素也是0,它必須替換為。(例如0.0)和點后的兩個元素之后(如0.01)這是我的代碼

 public class DecimalDigitsInputFilter implements InputFilter {

    Pattern mPattern;
    public DecimalDigitsInputFilter(int digitsBeforeZero,int digitsAfterZero) {
        mPattern=Pattern.compile("[0-9]*" + (digitsBeforeZero-1) + "}+((\\.[0-9]*" + (digitsAfterZero-1) + "})?)||(\\.)?");
    }

    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {

        Matcher matcher=mPattern.matcher(dest);
        if(!matcher.matches())
            return "";
        return null;
    }

}

我這樣調用這個方法

amountValue.setFilters(new InputFilter[] {new DecimalDigitsInputFilter(5,2)});

我如何重寫我的代碼來解決我的問題? 謝謝

您構建的正則表達式都是錯誤的。

正則表達式的第一部分是這個表達式:

"[0-9]*" + (digitsBeforeZero-1) + "}+"

digitsBeforeZero = 5 ,這會讓你:

[0-9]*4}+

這不是正確的正則表達式。 正則表達式應該是:

[0-9]{1,5}

表示 1 到 5 位數字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM