Android - Wie erlauben nur eine bestimmte Anzahl von Dezimalstellen

Kennen Sie eine Methode, um sicherzustellen, dass Benutzer können nur geben Sie zahlen mit einer maximalen Anzahl von Dezimalstellen.
Ich bin nicht sicher, wie dieses problem zu beheben. In der MS SQL Datenbank werde ich senden von Daten von meiner app habe ich Spalten mit dieser Art decimal(8,3)
Nun in Anbetracht der Datentyp der Spalte, die endlich um den Wert zu speichern, die ich überprüfen möchten in Android habe ich mir überlegt diese beiden Fälle:

  1. Wenn der Benutzer eine Zahl ohne Dezimalstellen, die die maximale Anzahl der Ziffern muss 8
  2. Wenn der Benutzer eine Zahl mit Dezimalstellen, die maximale Anzahl der Ziffern muss 8 (einschließlich der Ziffern rechts vom Dezimalkomma)

Nun ich bin mir sicher, dass über den ersten Fall, aber nicht so viel über die zweite. Ist es richtig und halten Sie die maximale Anzahl von Ziffern fest(z.B. immer 8)? Oder sollte ich beachten Sie dass Sie maximal 8 Ziffern Links und 3 rechts vom Dezimalpunkt?

Entweder Weg dies ist, was ich versucht habe, in Android:

mQuantityEditText.addTextChangedListener(new TextWatcher() {
            @Override
            public void afterTextChanged(Editable s) {
                String str = mQuantityEditText.getText().toString();
                DecimalFormat format = (DecimalFormat) DecimalFormat
                        .getInstance();
                DecimalFormatSymbols symbols = format.getDecimalFormatSymbols();
                char sep = symbols.getDecimalSeparator();

                int indexOFdec = str.indexOf(sep);

                if (indexOFdec >= 0) {
                    if (str.substring(indexOFdec, str.length() - 1).length() > 3) {                     
                        s.replace(0, s.length(),
                                str.substring(0, str.length() - 1));                        
                    }
                }
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {

            }
        });

Obwohl der obige code behandelt die maximale Anzahl von Dezimalstellen. Es begrenzt nicht die Gesamtzahl der zulässigen stellen in der EditText.

Glauben Sie, Sie könnten mir helfen, zu verbessern meinen code so, dass es behandelt sowohl die maximale Anzahl der Nachkommastellen und die Anzahl der zulässigen stellen in einem EditText (wenn man beide zahlen Links und rechts neben dem Dezimalpunkt)

BEARBEITEN

Gut, jetzt versuche ich das, was João Sousa vorgeschlagen, und hier ist, was ich versucht habe:

1) I definiert eine Klasse, die InputFilter

public class NumberInputFilter implements InputFilter {
    private Pattern mPattern;   

    public NumberInputFilter(int precision, int scale) {        
        String pattern="^\\-?(\\d{0," + (precision-scale) + "}|\\d{0," + (precision-scale) + "}\\.\\d{0," + scale + "})$";
        this.mPattern=Pattern.compile(pattern);

    }

    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned destination, int destinationStart, int destinationEnd) {
         if (end > start) {
             //adding: filter   
             //build the resulting text
             String destinationString = destination.toString();
             String resultingTxt = destinationString.substring(0, destinationStart) + source.subSequence(start, end) + destinationString.substring(destinationEnd);
             //return null to accept the input or empty to reject it
             return resultingTxt.matches(this.mPattern.toString()) ? null : "";
         }
         //removing: always accept
         return null;
    }

}

2) Versucht, verwenden Sie die Klasse wie folgt aus :

mQuantityEditText.setFilters(new InputFilter[] { new NumberInputFilter(8,3)} );
  • mögliche Duplikate von Android - Runde auf 2 Dezimalstellen
  • Sorry, aber ich werde jetzt nicht die Runde hier nichts, nur beschränken Sie die Anzahl der Dezimalstellen ein Benutzer eingeben kann.
InformationsquelleAutor eddy | 2014-11-22
Schreibe einen Kommentar