2012-01-11 16 views
237

Duplicar posible:
Round a double to 2 significant figures after decimal pointmejor manera de dar formato a un valor doble de 2 posiciones decimales

estoy tratando con muchos valores dobles en mi solicitud, ¿hay alguna manera fácil manejar el formateo de valores decimales en Java?

¿Hay alguna otra forma mejor de hacerlo que

DecimalFormat df = new DecimalFormat("#.##"); 

Lo que quiero hacer es, básicamente, los valores dobles formato como

23.59004 to 23.59 

35.7 to 35.70 

3.0 to 3.00 

9 to 9.00 
+1

más fácil que una línea adicional? Estoy bastante seguro de que es la forma más simple y clara de formatear un decimal. Tenga en cuenta que si este programa será utilizado por personas de diferentes lugares, DecimalFormat usará un ',' o '.' según corresponda para el separador decimal. Esto causó algunos problemas en un proyecto en el que estaba trabajando recientemente: escribir en un cuadro de texto y leer el valor incorrecto de él. – Dogmatixed

+1

Eso es lo que me preocupa mucho, leí ese DecimalFormat por configuración regional predeterminada. ¿Puedes decirme cómo logras que esto funcione con la localización? –

+0

Utilicé JFormattedTextFields como entrada, rellenándolos usando setValue() y leyendo de ellos usando getValue(). Para los lugares donde requirió un decimal, utilicé el objeto DecimalFormatSymbols. – Dogmatixed

Respuesta

380

No, no hay mejor manera.

Actualmente tiene un error en su patrón. Lo que queremos es:

DecimalFormat df = new DecimalFormat("#.00"); 

Nota del "00", lo que significa exactamente dos cifras decimales.

Si utiliza "#.##" (# significa "opcional" dígitos), caerá ceros finales - es decir, new DecimalFormat("#.##").format(3.0d); impresiones solo "3", no "3.00".

+0

En realidad, formateando 3.0 con #. ## imprimir 3. –

+0

¿Qué pasa con 0.99 convertidos a .99 o 0.99? –

+15

@MubasharAhmad '" .99 "' - el '#' significa "ceros opcionales". Si desea conservar el cero inicial (es decir, salida '" 0.99 "') utilice el patrón '" # 0.00 "' – Bohemian

294

Una alternativa es utilizar String.format:

double[] arr = { 23.59004, 
    35.7, 
    3.0, 
    9 
}; 

for (double dub : arr) { 
    System.out.println(String.format("%.2f", dub)); 
} 

de salida:

23.59 
35.70 
3.00 
9.00 

Usted podría también utilizar System.out.format (la misma firma del método), o crear un java.util.Formatter que funciona de la misma manera.

Cuestiones relacionadas