2010-10-19 11 views
29

Duplicar posible:
Round a double to 2 significant figures after decimal pointdoble formato de 2 decimales con los principales 0s

Estoy tratando de dar formato a un doble para 2 decimales con ceros a la izquierda y no hay suerte. Aquí está mi código:

Double price = 32.0; 
DecimalFormat decim = new DecimalFormat("#.##"); 
Double price2 = Double.parseDouble(decim.format(price)); 

Y quiero salida sea 32.00 vez me sale 32.0
Cualquier solución ??

+2

Dado que parece que se trata de divisas aquí, considere usar 'BigDecimal' para representar el dinero. Usar números de coma flotante puede conducir a problemas de redondeo. –

+0

Estoy seguro de que hay un millón de subprocesos SO en la moneda. Prefiero enteros a BigDecimal y luego trato en términos de centavos. Por supuesto, eso no está ni aquí ni allá ... –

+0

su código no es del todo correcto (por ejemplo, nunca muestra cómo obtiene el resultado). ¿Podrías cambiar tu programa a uno completo (con una clase y un método principal) y decirnos el resultado esperado? – TofuBeer

Respuesta

45

PO quiere ceros a la izquierda. Si ese es el caso, entonces según Tofubeer:

DecimalFormat decim = new DecimalFormat("0.00"); 

Editar:

Recuerde, estamos hablando sobre el formato de los números aquí, no la representación interna de los números.

Double price = 32.0; 
    DecimalFormat decim = new DecimalFormat("0.00"); 
    Double price2 = Double.parseDouble(decim.format(price)); 
    System.out.println(price2); 

imprimirá price2 utilizando el formato por defecto . Si desea imprimir la representación con formato, imprimir utilizando el formato:

String s = decim.format(price); 
    System.out.println("s is '"+s+"'"); 

En este sentido, no creo que su parseDouble() está haciendo lo que quiere, ni puede.

+0

también lo intenté y todavía no funciona –

+0

Publique algunos datos de ejemplo y los resultados producidos por el código anterior. –

+0

Nuevo código publicado anteriormente. –

13

Prueba esto:

DecimalFormat decim = new DecimalFormat("#.00"); 
+0

intentado esto y no funciona .. –

+0

Esta es la respuesta si ya está trabajando en dobles. Me enviaron a una búsqueda inútil con la idea de convertirlo en un BigDecimal, pero esto es simple y funciona muy bien. – ekerner

+0

no funciona :( – Jorgesys