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.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

import

import java.text.DecimalFormat;
...
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

Imagen de meztor

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

function separarMiles(Elemento){
    //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

String[] cantidades = "1000000.987".split("\\.");

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

Imagen de ezamudio

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)

Imagen de Jvan

String.format();

Una manera más simplificada si usas Java 1.5+ es hacer esto:

float NUMERO_AUREO = 1.618033f;
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...

DecimalFormat formateador = new DecimalFormat("###,###.##");
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:

DecimalFormatSymbols simbolo=new DecimalFormatSymbols();
    simbolo.setDecimalSeparator('.');
    simbolo.setGroupingSeparator(',');
DecimalFormat formateador = new DecimalFormat("###,###.##",simbolo);

Y con esto tu especificaras los separadores que se mostraran en el formato.

Imagen de chicowed

Procedimiento Normal

Llevo poco tiempo programando, de echo no se mucho, pero cuando se me presenta un problema, como este, me hago la siguiente pregunta:

¿Habrán tenido muchos programadores necesidad de resolver este problema? , ¿Si es así a lo mejor hay en el API de Java alguna Clase que contenga un método que me solucione el problema?

Y procedo a buscar si existe tal método "para no complicarme la existencia", cuando se trata de potabilidad, mantenimiento, rapidez, etc.
Si existe ya la arme, solo tengo que leer la documentación para ver como se usa...

Por supuesto que podemos crear algoritmos propios para resolver dichos problemas, pero lo más rápido y eficiente en general será usar las herramientas del API disponibles porque están desarrolladas por profesionales y han sido depuradas y optimizadas a lo largo de los años y versiones del lenguaje.

Re: formato

 

En un JSP (con JSTL):

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<c:set var="price" value="${1000000}"/>
<fmt:setLocale value="es_MX"/>
<fmt:formatNumber value="${price}" pattern="#,##0.00" />
1,000,000.00

Si se utiliza de_DE en lugar de es_MX:

1.000.000,00

Si se utiliza fr_FR en lugar de es_MX:

1 000 000,00

~~~