जैसा कि अन्य लोगों ने कहा, मैंने अपनी परियोजना में इस वर्ग को जोड़ा और फ़िल्टर को EditText
मेरी इच्छा के अनुसार सेट किया ।
फ़िल्टर को @ Pixel के उत्तर से कॉपी किया गया है। मैं बस यह सब एक साथ रख रहा हूँ।
public class DecimalDigitsInputFilter implements InputFilter {
Pattern mPattern;
public DecimalDigitsInputFilter() {
mPattern = Pattern.compile("([1-9]{1}[0-9]{0,2}([0-9]{3})*(\\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\\.[0-9]{0,2})?|0(\\.[0-9]{0,2})?|(\\.[0-9]{1,2})?)");
}
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
String formatedSource = source.subSequence(start, end).toString();
String destPrefix = dest.subSequence(0, dstart).toString();
String destSuffix = dest.subSequence(dend, dest.length()).toString();
String result = destPrefix + formatedSource + destSuffix;
result = result.replace(",", ".");
Matcher matcher = mPattern.matcher(result);
if (matcher.matches()) {
return null;
}
return "";
}
}
अब अपने EditText
इस तरह से फ़िल्टर सेट करें।
mEditText.setFilters(new InputFilter[]{new DecimalDigitsInputFilter()});
यहाँ एक महत्वपूर्ण बात यह है कि इसमें दशमलव बिंदु के बाद दो से अधिक अंक नहीं दिखाने की मेरी समस्या को हल करता है, EditText
लेकिन समस्या यह getText()
है कि जब मैं इससे होता हूं EditText
, तो यह मेरे द्वारा टाइप किए गए पूरे इनपुट को वापस कर देता है।
उदाहरण के लिए, फ़िल्टर को लागू करने के बाद EditText
, मैंने इनपुट 1.5699856987 सेट करने का प्रयास किया। तो स्क्रीन में यह 1.56 दिखाता है जो एकदम सही है।
तब मैं इस इनपुट का उपयोग कुछ अन्य गणनाओं के लिए करना चाहता था इसलिए मैं उस इनपुट फ़ील्ड से पाठ प्राप्त करना चाहता था ( EditText
)। जब मैंने फोन किया तो mEditText.getText().toString()
यह 1.5699856987 था जो मेरे मामले में स्वीकार्य नहीं था।
इसलिए मुझे इसे प्राप्त करने के बाद फिर से मूल्य को पार्स करना पड़ा EditText
।
BigDecimal amount = new BigDecimal(Double.parseDouble(mEditText.getText().toString().trim()))
.setScale(2, RoundingMode.HALF_UP);
setScale
से पूरा पाठ प्राप्त करने के बाद यहाँ चाल है EditText
।