Séparateur décimal dans NumberFormat

Étant donné une locale java.texte.NumberFormat:

NumberFormat numberFormat = NumberFormat.getInstance();

Comment puis-je obtenir le caractère utilisé comme séparateur décimal (s'il s'agit d'une virgule ou d'un point) dans ce numberformat? Comment puis-je modifier cette propriété sans avoir à utiliser New DecimalFormat (format)?

Merci

40
demandé sur Javi 2011-01-17 15:32:19

3 réponses

La classe d'AIDE DecimalFomatSymbols est ce que vous recherchez:

DecimalFormat format=DecimalFormat.getInstance();
DecimalFormatSymbols symbols=format.getDecimalFormatSymbols();
char sep=symbols.getDecimalSeparator();

Pour définir les symboles nécessaires:

//create a new instance
DecimalFormatSymbols custom=new DecimalFormatSymbols();
custom.setDecimalSeparator(',');
format.setDecimalFormatSymbols(custom);

EDIT: cette réponse n'est valable que pour DecimalFormat, et non pour NumberFormat comme requis dans la question. Quoi qu'il en soit, comme cela peut aider l'auteur, je vais le laisser ici.

69
répondu Tomas Narros 2011-01-17 12:42:53

Je suis d'accord avec biziclop et Joachim Sauer que jouer avec des séparateurs décimaux et de regroupement et faire ce travail manuellement, peut causer beaucoup de problèmes. L'utilisation du paramètre locale dans la méthode NumberFormat getInstance fait tout le travail pour vous automatiquement. Et vous pouvez facilement désactiver le séparateur de milliers de groupes, si vous le souhaitez.

La méthode de test junit suivante (qui passe) montre ce comportement basé sur les paramètres régionaux anglais et allemand.

public void testFormatter() {
    DecimalFormat formatter = (DecimalFormat) DecimalFormat.getInstance(Locale.UK);
    assertEquals('.', formatter.getDecimalFormatSymbols().getDecimalSeparator()); //true

    formatter = (DecimalFormat) DecimalFormat.getInstance(Locale.GERMAN);
    assertEquals(',', formatter.getDecimalFormatSymbols().getDecimalSeparator()); //true

    //and in case you want another decimal seperator for a specific locale
    DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
    decimalFormatSymbols.setDecimalSeparator('.');

    formatter.setDecimalFormatSymbols(decimalFormatSymbols);
    assertEquals('.', formatter.getDecimalFormatSymbols().getDecimalSeparator()); //true
}
5
répondu Maria Ioannidou 2011-01-17 13:37:27

If votre NumberFormat exemple, est un DecimalFormat, ensuite, vous pouvez utiliser getDecimalFormatSymbols() pour obtenir cette information.

En général, vous ne pouvez pas accéder à cette information.

Pourquoi en avez-vous besoin?

2
répondu Joachim Sauer 2011-01-17 12:37:17