Java DecimalFormat: comment rejeter l'entrée « invalide » avec des décimales groupées?

StackOverflow https://stackoverflow.com/questions/1680120

Question

Lorsque vous utilisez le NumberFormat suivant:

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

Je reçois les résultats suivants lors de l'analyse via

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

Je sais que dans le Locale.ENGLISH « » est le séparateur de groupe. Mais je ne pense pas que les résultats ci-dessus ont un sens. Et nos clients deviennent étranges au sujet de cette mise en forme.

Comment puis-je désactiver ce groupe?

Je voudrais avoir les résultats suivants:

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

Yat-il un moyen standard pour le faire? Ou dois-je programmer mon propre NumberFormat?

Était-ce utile?

La solution

Un problème est le caractère de regroupement ( « » dans un environnement linguistique anglais). Pour désactiver le regroupement support pour l'instance NumberFormat, vous pouvez simplement invoquer setGroupingUsed (false).

Cependant, cela conduit à un autre problème, à savoir que NumberFormat parse depuis le début de la chaîne, jusqu'à ce qu'il atteigne un caractère inconnu. analyser ( "12foo") retournera 12, tout comme parse ( "10,50") retourne 10 si le regroupement est désactivé. Pour vérifier si la chaîne d'entrée entière a été effectivement analysé, vous devez utiliser les méthodes d'analyse grammaticale avec un argument ParsePosition et vérifier son index et si la chaîne d'entrée a été analysée à la fin ou si l'analyseur arrêté à une position antérieure dans la chaîne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top