2012-01-08 26 views
16

Quiero convertir un número a 2 lugares decimales (Mostrar siempre dos lugares decimales) en tiempo de ejecución. Probé un poco de código, pero sólo lo hace, como se muestra a continuaciónConvertir un número a 2 decimales en Java

20.03034 >> 20.03 
20.3 >> 20.3 (my code only rounds not converts) 
embargo

, yo quiero que haga esto:

20.03034 >> 20.03 
20.3 >> 20.30 (convert it to two decimal places) 

Mi código de abajo:

angle = a variable 
angle_screen = a variable 

DecimalFormat df = new DecimalFormat("#.##"); 
angle = Double.valueOf(df.format(angle)); 
angle_screen.setText(String.valueOf(angle) + tmp); 

Cualquier ayuda sobre cómo hacer esto sería genial, gracias.

+0

Su código es defectuoso de alguna manera. Convierte un doble en una cadena con un formato especial. Luego lo convierte de nuevo en un doble y luego lo convierte de nuevo en una cadena sin especificar ningún formato. Supongo que eso está mal. Además, el propósito de la variable 'tmp' no es obvio. – Robert

+2

Deberías leer la API 'DecimalFormat'; la respuesta está ahí y está bastante clara. – Paul

+1

posible duplicado de [Redondea un doble a 2 cifras significativas después del punto decimal] (http://stackoverflow.com/questions/2808535/round-a-double-to-2-significant-figures-after-decimal-point) –

Respuesta

52

tratar esta actualización new DecimalFormat("#.00");

:

double angle = 20.3034; 

    DecimalFormat df = new DecimalFormat("#.00"); 
    String angleFormated = df.format(angle); 
    System.out.println(angleFormated); //output 20.30 

El código no estaba usando el DecimalFormat correctamente

El 0 en el patrón significa un dígito obligatorio, el # significa dígitos opcional .

actualización 2: comprobación de abajo responder

Si desea 0.2677 formateado como 0.27 se debe utilizar new DecimalFormat("0.00"); de lo contrario será .27

+1

No funciona:/ –

+0

Me di cuenta ... He actualizado la respuesta –

+0

Sí 100% funciona, gracias –

2

Trate

DecimalFormat df = new DecimalFormat("#,##0.00"); 
+0

No funciona:/ –

15

Prueba esto: String.format("%.2f", angle);

+2

¡La mejor respuesta para aquellos con una API mínima por debajo de 24! ¡Gracias! :) – Necroqubus

+0

@ Necroqubus ¡De nada! :) – Jagger

18
DecimalFormat df=new DecimalFormat("0.00"); 

Utilice este código para obtener dos puntos decimales exactos. Incluso si el valor es 0.0 le dará 0.00 como resultado.

En cambio si se utilizan:

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

No lo puedo convertir 0,2659 a 0,27 . Obtendrá una respuesta como .27.

+5

¿por qué esto no tiene más votos?es información importante que se debe agregar a la respuesta aceptada – sports

+0

por qué no está convirtiendo mi valor flotante 98786545/10^6 en dos formatos decimales. Después de convertirlo a dos decimales, quiero guardarlo como una cadena. –

+0

@sports \t Requiere nivel de API 24 por lo tanto, es una solución bastante mala para proyectos con compatibilidad – Necroqubus

Cuestiones relacionadas