Frage

Bei Verwendung des folgenden Number:

    NumberFormat amountFormat = NumberFormat
        .getNumberInstance(I18N.getThreadLocale());
    amountFormat.setMaximumFractionDigits(2);
    amountFormat.setMinimumFractionDigits(2);

Ich erhalte die folgenden Ergebnisse, wenn sie über

Parsen
    System.out.println(amountFormat.parse(value));
  • 10,50 => 1050
  • 10,5 => 105
  • 0,25 => 25

Ich weiß, dass in Locale.ENGLISH der "" die Gruppe Separator. Aber ich glaube nicht, dass die obigen Ergebnisse Sinn machen. Und unsere Kunden bekommen seltsam diese Formatierung.

Wie kann ich diese Gruppierung deaktivieren?

Ich möchte die folgenden Ergebnisse haben:

  • 10,50 => ParseException
  • 10,5 => ParseException
  • 0,25 => ParseException

Gibt es eine standardisierte Möglichkeit, dies zu tun? Oder muss ich mein eigenes Number programmieren?

War es hilfreich?

Lösung

Ein Problem ist die Gruppierung Zeichen ( '' in einem englischen locale). So deaktivieren Sie Unterstützung Gruppierung für die Number Beispiel können Sie einfach setGroupingUsed (false) aufrufen.

Dies führt jedoch zu einem anderen Problem, nämlich dass Number vom Anfang der Zeichenfolge analysiert, bis sie ein unbekanntes Zeichen erreicht. Parsen ( "12foo") wird 12 zurück, so wie parse ( "10,50") wird 10 zurück, wenn Gruppierung deaktiviert ist. Um zu überprüfen, ob die gesamte Eingabezeichenfolge tatsächlich analysiert wurde, müssen Sie die Parse-Methoden mit einem ParsePosition Argumente verwenden und seinen Index überprüfen und, wenn die Eingabezeichenfolge zu Ende analysiert wurde oder wenn der Parser in einer früheren Position in der Zeichenfolge gestoppt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top