web-dev-qa-db-fra.com

Séparateur décimal dans NumberFormat

Étant donné une locale Java.text.NumberFormat:

NumberFormat numberFormat = NumberFormat.getInstance();

Comment puis-je obtenir le caractère utilisé comme séparateur décimal (si c'est une virgule ou un point) dans ce format numérique? Comment puis-je modifier cette propriété sans avoir à utiliser le nouveau DecimalFormat (format)?

Merci

42
Javi

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

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

Pour définir des symboles selon vos besoins:

//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.

75
Tomas Narros

Je suis d'accord avec biziclop et Joachim Sauer que jouer avec des séparateurs décimaux et grouper 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 automatiquement pour vous. Et vous pouvez facilement désactiver le séparateur de milliers de regroupements, si vous le souhaitez.

La méthode de test junit suivante (qui réussit) 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
Maria Ioannidou

Si votre instance NumberFormat est une DecimalFormat , alors vous pouvez utiliser getDecimalFormatSymbols() pour accéder à ces informations.

En général, vous ne pouvez pas accéder à ces informations.

Pourquoi en avez-vous besoin?

2
Joachim Sauer