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

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

97
demandé sur Funtime 2011-03-16 12:50:31

8 réponses

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 le JavaDoc, la distribution de la première ligne doit être sauvegardée pour la plupart des paramètres régionaux.

86
répondu Andreas_D 2015-06-29 11:18:22

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

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

//str = 124,750

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

Docs

182
répondu syloc 2012-10-01 23:26:11
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 regroupement 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()));
44
répondu adarshr 2011-03-16 10:55:41

Essayez ce code pour le formater tel qu'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"
12
répondu dellasavia 2014-01-27 16:01:44
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
répondu Dead Programmer 2011-03-16 10:14:56

La réponse acceptée doit être vraiment modifiée sinon ne fonctionne pas. Le getDecimalFormatSymbols fait 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: formateur.setDecimalFormatSymbols (Symboles);

3
répondu zatziky 2014-06-20 07:05:46
NumberFormat nf = DecimalFormat.getInstance(myLocale);
DecimalFormatSymbols customSymbol = new DecimalFormatSymbols();
customSymbol.setDecimalSeparator(',');
customSymbol.setGroupingSeparator(' ');
((DecimalFormat)nf).setDecimalFormatSymbols(customSymbol);
nf.setGroupingUsed(true);
3
répondu Gab 2014-09-29 09:21:10

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));
0
répondu akelec 2017-06-06 13:00:42