web-dev-qa-db-fra.com

Comment définir un séparateur de milliers en Java?

Comment définir un séparateur de milliers en Java? J'ai la représentation sous forme de chaîne de BigDecimal, je veux définir un séparateur de milliers et renvoyer une chaîne.

105
Funtime

Cela devrait fonctionner (non testé, basé sur JavaDoc):

DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();

symbols.setGroupingSeparator(' ');
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(bd.longValue()));

Selon JavaDoc, la conversion dans la première ligne doit être enregistrée pour la plupart des paramètres régionaux.

90
Andreas_D

Vous pouvez utiliser la fonction de format avec ",";

int no = 124750;
String str = String.format("%,d", no);

//str = 124,750

"," inclut les caractères de regroupement spécifiques aux paramètres régionaux.

docs

197
syloc
BigDecimal bd = new BigDecimal(300000);

NumberFormat formatter = NumberFormat.getInstance(new Locale("en_US"));

System.out.println(formatter.format(bd.longValue()));

MODIFIER

Pour obtenir un séparateur de groupe personnalisé tel que l'espace, procédez comme suit:

DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance();
symbols.setGroupingSeparator(' ');

DecimalFormat formatter = new DecimalFormat("###,###.##", symbols);
System.out.println(formatter.format(bd.longValue()));
46
adarshr

essayez ce code au format utilisé au Brésil:

    DecimalFormat df = new DecimalFormat(
      "#,##0.00", 
      new DecimalFormatSymbols(new Locale("pt", "BR")));

    BigDecimal value = new BigDecimal(123456.00);

    System.out.println(df.format(value.floatValue()));

    // results: "123.456,00"
13
dellasavia
DecimalFormatSymbols formatSymbols = new DecimalFormatSymbols();
formatSymbols.setDecimalSeparator('|');
formatSymbols.setGroupingSeparator(' ');

String strange = "#,##0.###";
DecimalFormat df = new DecimalFormat(strange, formatSymbols);
df.setGroupingSize(4);

String out = df.format(new BigDecimal(300000).doubleValue());

System.out.println(out);
3
Dead Programmer
NumberFormat nf = DecimalFormat.getInstance(myLocale);
DecimalFormatSymbols customSymbol = new DecimalFormatSymbols();
customSymbol.setDecimalSeparator(',');
customSymbol.setGroupingSeparator(' ');
((DecimalFormat)nf).setDecimalFormatSymbols(customSymbol);
nf.setGroupingUsed(true);
3
Gab

La réponse acceptée doit être vraiment modifiée, sinon elle ne fonctionnera pas. GetDecimalFormatSymbols effectue une copie défensive. Ainsi,

DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();

symbols.setGroupingSeparator(' ');
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(bd.longValue()));

La nouvelle ligne est celle-ci: formatter.setDecimalFormatSymbols (symboles);

3
Amio.io

Pour décimales

DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
DecimalFormat dfDecimal = new DecimalFormat("###########0.00###");
dfDecimal.setDecimalFormatSymbols(symbols);
dfDecimal.setGroupingSize(3);
dfDecimal.setGroupingUsed(true);
System.out.println(dfDecimal.format(number));
2
akelec

Si vous utilisez le séparateur de milliers pour le type de données Integer, utilisez 1.

  1. Pour les données entières Type

String.format ("%, d\n", 58625) et la sortie sera 58,625

  1. Pour les données en virgule flottante, tapez String.format ("% ,. 2f", 58625.21) et la sortie sera 58,625.21
0
Waqas Ahmed

Comme mentionné ci-dessus, le link suivant vous donne le code de pays spécifique permettant à Java de localiser le numéro. Chaque pays a son propre style. 

Dans le lien ci-dessus, vous trouverez le code du pays qui doit être placé ici:

...(new Locale(<COUNTRY CODE HERE>));

La Suisse, par exemple, formate les nombres comme suit:

1000.00 -> 1'000.00

code postal

Pour cela, suivre codes fonctionne pour moi:

NumberFormat nf = NumberFormat.getNumberInstance(new Locale("de","CH"));
nf.setMaximumFractionDigits(2);
DecimalFormat df = (DecimalFormat)nf;
System.out.println(df.format(1000.00));

Le résultat est comme prévu:

1'000.00
0
0xjacobb