Formatear Miles y decimales
Existe alguna librería para separar miles y decimales
si escribo en un textfield:1000 me de formato 1,000.00
si escribo 10000 de formato a 10,000.00
y asi sucesivamente para cantidades mayores.
He mirado DecimalFormat.
A ver si alguien me tira un par de ejemplos.
- Inicie sesión o regístrese para enviar comentarios



import
...
DecimalFormat formateador = new DecimalFormat("###,###.##");
//Este daria a la salida 1,000
System.out.println (formateador.format (1000));
//Este otro 10,000
System.out.println (formateador.format (10000));
Te explico el # indica un digito pero no pinta el cero a la izquierda, la coma es un simple separador al igual que el punto.
DecimalFormat
no sabia que existía eso
yo necesitaba hacer lo mismo pero para web y lo hice asi, noes muy nbueno, pero para lo que lo necesito basta y sobra
//0123456789
//deve de quedar $123,456,789.00
//del elemento obtenemos su valor
var valor=Elemento.value;
var valorDecimal;
var agregar00=true;
if(valor.indexOf("$")!=-1){
}else{
//se compara para ver si tiene decimales
if(valor.indexOf(".")!=-1){
//si tiene decimales no se la gregara el .00
agregar00=false;
//se separa el valor decimal del valor entero
valorDecimal=valor.substring(valor.indexOf("."), largo);
valor=valor.substring(0, valor.indexOf("."));
}
//se toma el valor del entero
var largo=valor.length;
if(largo>9){
valor=valor.substring(largo-12,largo-9)+","+valor.substring(largo-9,largo-6)+","+valor.substring(largo-6,largo-3)+","+valor.substring(largo-3, largo);
}else
if(largo>6){
valor=valor.substring(largo-9,largo-6)+","+valor.substring(largo-6,largo-3)+","+valor.substring(largo-3, largo);
}else
if(largo>3){
valor=valor.substring(largo-6,largo-3)+","+valor.substring(largo-3, largo);
}
valor="$"+valor;
if(agregar00==true){
valor=valor+".00"
}else{
valor=valor+valorDecimal;
}
Elemento.value=valor;
}
}
Otra forma de los decimales
Con esto podiras hacer con numeros de mas de 9 posiciones
StringBuilder sb = new StringBuilder(cantidades[0]).append(".");
for (int i = 1, len = sb.length(); i < len; i++) {
if (i % 4 == 0) {
sb.insert(len = sb.length() - i, ',');
len = sb.length();
}
}
Se queda de tarea el de los decimales
por que?
La primera solucion es la optima, por que quieren hacer sus formateadores a mano? La primera solucion es portable ademas; DecimalFormat acepta int, long, double, float, BigInteger, BigDecimal... y si usan ese codigo en un idioma que voltea puntos y comas (1.000,00 en vez de 1,000.00), DecimalFormat funciona con eso.
Diversion
Pues yo tambien uso el Formateador que tiene java, pero pus' estas son cositas que se escriben en un par de minutitos.
(bueno para pasar el tiempo)
String.format();
Una manera más simplificada si usas Java 1.5+ es hacer esto:
float VELOCIDAD_LUZ = 299792458f;
System.out.printf("El número aúreo con 4 decimales es: %.4f%n", NUMERO_AUREO);
System.out.printf("El número aúreo con 2 decimales es: %.2f%n", NUMERO_AUREO);
System.out.printf("La velocidad de la luz aproximada es: %,.0f m/s%n", VELOCIDAD_LUZ);
//Salida
El número aúreo con 4 decimales es: 1.6180
El número aúreo con 2 decimales es: 1.62
La velocidad de la luz aproximada es: 299,792,448 m/s
Y así puedes jugar con los formatos, rellenar con ceros o con espacios a la izquierda, separar por comas, el número de decimales a mostrar, si quieres signo o no, etc.
Dale un vistazo a la API para que veas todas las opciones que puedes poner.
Cambiar Formato
Soy Nuevo en estas librerias, he estado leyendo, y me funciona, pero quiero cambiar el formato de los numeros...
System.out.println (formateador.format (1000));
System.out.println (formateador.format (100000.78));
pero no logro cambiar el formato que salga el punto decimal como coma decimal.
me imprime 10.000,78
necesito que me imprima el numero asi:
10,000.78
Gracias de Antemano...
Eso es debido a la región que
Eso es debido a la región que se especifico al instalar windows.
Pero tiene solución, solo tienes que escribir esto:
simbolo.setDecimalSeparator('.');
simbolo.setGroupingSeparator(',');
DecimalFormat formateador = new DecimalFormat("###,###.##",simbolo);
Y con esto tu especificaras los separadores que se mostraran en el formato.