2011-03-16 108 views

Respuesta

78

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 molde en la primera línea debe ser guardar para la mayoría de las configuraciones regionales.

+15

Comentario no probado sobre esto: Javadoc para 'getDecimalFormatSymbols()' dice: 'Devuelve: una copia del DecimalFormatSymbols' deseado. Entonces debería usar 'setDecimalFormatSymbols (theCopy)' después de alterar la copia. –

+5

Los documentos para bd.longValue() dicen "cualquier parte fraccionaria será descartada".Así que no sé si esta es la mejor manera de hacerlo si le importa la precisión – codinguser

+2

. Supongo que podría usar 'new' y volver a formateador: ' DecimalFormatSymbols customSymbol = new DecimalFormatSymbols(); ' ' customSymbol.setDecimalSeparator (decimalSeperator.charAt (0)); ' ' customSymbol.setGroupingSeparator (thousandSeperator); ' ' formatter.setDecimalFormatSymbols (customSymbol); ' –

39
BigDecimal bd = new BigDecimal(300000); 

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

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

EDITAR

Para obtener agrupación personalizada de separación tales como el espacio, hacer esto:

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

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

thx. y necesito cambiar el separador de miles al espacio ("") – Funtime

+0

sé que necesito usar DecimalFormatSymbols setGroupingSeparator, pero no sé cómo aplicarlo en mi BigDecimal – Funtime

+1

@Funtime: no lo "aplicas en tu BigDecimal ". Construyes un objeto 'NumberFormat' con las propiedades deseadas y lo usas para formatear tu' BigDecimal'. Un 'BigDecimal' solo tiene un valor especificado, ** no ** tiene un formato especificado. –

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

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.

docs

+4

¿Qué sucede si quiero utilizar un '.' como separador? – Enissay

+0

¡Como suelo usar String.format, es lo mejor y más fácil para mí! – Ali

+12

@Enissay Call 'format()' con una configuración regional explícita ('Local.US' se usa para usar', 'como separador) y luego reemplace', 'con su separador personalizado:' String.format (Locale.US, "%, d", n) .replace (',', '.') '. – minipif

9

probar este código de formato que se utiliza 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" 
+2

Usted también intenta esto, en el caso de JasperReports, forzando el formato correcto: 'parameters.put (" REPORT_LOCALE ", nueva configuración regional (" pt "," BR "));' Envía este parámetro al informe. – dellasavia

+0

La mejor respuesta aquí. –

3

La respuesta aceptada tiene que ser realmente alterado de lo contrario no funciona. El getDecimalFormatSymbols hace una copia defensiva. Por lo tanto,

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 ésta: formatter.setDecimalFormatSymbols (símbolos);

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

Me funcionó. Gracias ! –

+0

Esto no funcionará con los decimales – Price

+1

por supuesto que funciona ... – Gab

0

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