Cómo configurar miles separador en Java?

Cómo configurar miles separador en Java? Tengo una representación de cadenas de BigDecimal, quiero establecer miles de separadores y devolver String.

Esto debería funcionar (no probado, basado en JavaDoc):

DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US); DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols(); symbols.setGroupingSeparator(' '); formatter.setDecimalFormatSymbols(symbols); System.out.println(formatter.format(bd.longValue())); 

De acuerdo con JavaDoc, el elenco en la primera línea debe guardarse para la mayoría de las configuraciones regionales.

Puede usar la función de formateo con “,”;

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

“,” incluye caracteres de agrupación específicos de la configuración regional.

documentos

 BigDecimal bd = new BigDecimal(300000); NumberFormat formatter = NumberFormat.getInstance(new Locale("en_US")); System.out.println(formatter.format(bd.longValue())); 

EDITAR

Para obtener un separador de agrupación personalizado como espacio, haga esto:

 DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance(); symbols.setGroupingSeparator(' '); DecimalFormat formatter = new DecimalFormat("###,###.##", symbols); System.out.println(formatter.format(bd.longValue())); 

prueba este código para formatear como se usa en Brasil:

  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" 
 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); 

La respuesta aceptada debe ser realmente alterada de lo contrario no funciona. El getDecimalFormatSymbols hace una copia defensiva. Así,

 DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US); DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols(); symbols.setGroupingSeparator(' '); formatter.setDecimalFormatSymbols(symbols); System.out.println(formatter.format(bd.longValue())); 

La nueva línea es esta: formatter.setDecimalFormatSymbols (symbols);

 NumberFormat nf = DecimalFormat.getInstance(myLocale); DecimalFormatSymbols customSymbol = new DecimalFormatSymbols(); customSymbol.setDecimalSeparator(','); customSymbol.setGroupingSeparator(' '); ((DecimalFormat)nf).setDecimalFormatSymbols(customSymbol); nf.setGroupingUsed(true); 

Para decimales :

 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));