Java DecimalFormat: come rifiutare di ingresso “non valido” con i decimali raggruppate?

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

Domanda

Quando si utilizza il seguente NumberFormat:

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

Ottengo i seguenti risultati durante l'analisi tramite

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

So che in Locale.ENGLISH il "" è il separatore di gruppo. Ma non credo che i risultati di cui sopra hanno senso. E i nostri clienti ottengono strano su questa formattazione.

Come faccio a disattivare questo raggruppamento?

Mi piacerebbe avere i seguenti risultati:

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

C'è un modo standard per fare questo? O devo programmare il mio NumberFormat?

È stato utile?

Soluzione

Un problema è il carattere di raggruppamento ( '' in un locale inglese). Per disabilitare il raggruppamento il supporto per l'istanza NumberFormat, si può semplicemente richiamare setGroupingUsed (false).

Questo tuttavia, porta ad un problema differente, e cioè che NumberFormat analizza dall'inizio della stringa, fino a raggiungere un carattere incognito. parse ( "12foo") restituirà 12, proprio come parse ( "10,50") restituirà 10 se il raggruppamento è disattivato. Per verificare se l'intera stringa di input è stato effettivamente analizzato, è necessario utilizzare i metodi di parsing con un argomento ParsePosition e verificare il suo indice e se la stringa di input è stato analizzato alla fine o se il parser fermato a una precedente posizione nella stringa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top