Respuestas:
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()));
Según JavaDoc, el reparto en la primera línea debe guardarse para la mayoría de las configuraciones regionales.
getDecimalFormatSymbols()
dice: Returns: a copy of the desired DecimalFormatSymbols
. Por lo tanto, debe usar setDecimalFormatSymbols(theCopy)
después de alterar la copia.
new
y configurarlo de nuevo en formateador: DecimalFormatSymbols customSymbol = new DecimalFormatSymbols();
customSymbol.setDecimalSeparator(decimalSeperator.charAt(0));
customSymbol.setGroupingSeparator(thousandSeperator);
formatter.setDecimalFormatSymbols(customSymbol);
Puede usar la función de formato con ",";
int no = 124750;
String str = String.format("%,d", no);
//str = 124,750
"," incluye caracteres de agrupación específicos de la localidad.
.
como separador?
format()
con una configuración regional explícita ( Local.US
se sabe que el uso ,
como separador) y luego vuelva a colocar ,
con su separador personalizado: String.format(Locale.US, "%,d", n).replace(',', '.')
.
int
. O a long
. O a BigInteger
. Y use f si quiere usar double
, float
o BigDecimal
.
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 el espacio, haga esto:
DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance();
symbols.setGroupingSeparator(' ');
DecimalFormat formatter = new DecimalFormat("###,###.##", symbols);
System.out.println(formatter.format(bd.longValue()));
NumberFormat
objeto con las propiedades deseadas y lo usa para formatear su BigDecimal
. A BigDecimal
solo tiene un valor especificado, no tiene un formato especificado.
pruebe 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"
parameters.put("REPORT_LOCALE", new Locale("pt", "BR"));
envíe este parámetro para informar.
Si está utilizando un separador de miles para el tipo de datos Entero, use 1.
String.format ("%, d \ n", 58625) y el resultado será 58,625
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 tiene que modificarse realmente, de lo contrario no funcionará. Los 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 (símbolos);
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));
Como se mencionó anteriormente, el siguiente enlace le proporciona el código de país específico para permitir que Java localice el número. Cada país tiene su propio estilo.
En el enlace de arriba encontrará el código de país que debe colocarse aquí:
...(new Locale(<COUNTRY CODE HERE>));
Suiza, por ejemplo, formatea los números de la siguiente manera:
1000.00 -> 1'000.00
Para lograr esto, los siguientes códigos me funcionan:
NumberFormat nf = NumberFormat.getNumberInstance(new Locale("de","CH"));
nf.setMaximumFractionDigits(2);
DecimalFormat df = (DecimalFormat)nf;
System.out.println(df.format(1000.00));
El resultado es el esperado:
1'000.00
public String formatStr(float val) {
return String.format(Locale.CANADA, "%,.2f", val);
}
formatStr(2524.2) // 2,254.20