¿Cómo convertir un número a dos decimales si es doble?
-
20-12-2019 - |
Pregunta
Estoy intentando convertir un número a dos decimales usando Java.A continuación se muestra lo que he probado y funciona bien en un par de entradas:
double number = 20.3794;
DecimalFormat df = new DecimalFormat("#.00");
String formattedNumber = df.format(number);
System.out.println(formattedNumber); //output 20.38
A continuación se muestran mis escenarios:
- Pero para este número
20
, la salida la obtengo como20.00
.En este caso no necesito.00
al final, debería imprimirse como20
solo. - Lo mismo para este número
0.019
se imprime.02
entonces para esto necesito tener0
delante de.
entonces0.02
debería imprimirse.
¿Es posible hacer esto?
Solución
parece que has intercambiado #
y 0
: 0
es para cuando quieres forzar un cero y #
es para cuando el dígito es opcional.
El patrón "0.##"
hace exactamente lo que quieres.
Otros consejos
Puedes probar string format
en cambio con algo de lógica
muestra:
double s = 20;
double s2 = 0.019;
String result1 = String.format("%.2f", s);
String result2 = String.format("%.2f", s2);
System.out.println((result1.contains(".00")) ? (int)s : result1);
System.out.println((result2.contains(".00")) ? (int)s : result2);
resultado:
20
0.02
- Para obtener el 0 delante de un número menor que 1, cambie
"#"
a"0"
- Para cambiar el número entero que se imprime con dos decimales, cambie los dos
"0"
en los decimales que deben estar"#"
por lo que sólo los imprime si hay números distintos de 0 en esos lugares.
Básicamente el problema es que tu "#"
y "0"
están al revés.Cambiar el patrón a "0.##"
en lugar de "#.00"
.El #
indica que un número solo debe mostrarse allí si no es 0 (el cero se muestra como ausente).El 0
indica que siempre habrá un número en ese lugar y será 0 si es necesario.Echa un vistazo a los documentos.
Aquí hay unos ejemplos:
double number1 = 20.3794, number2 = 20, number3 = 0.018, number4 = 20.1;
DecimalFormat df = new DecimalFormat("0.##");
System.out.println(df.format(number1)); // 20.38
System.out.println(df.format(number2)); // 20
System.out.println(df.format(number3)); // 0.02
System.out.println(df.format(number4)); // 20.1
Para el 1er caso: controlar
if (number % 1 == 0)
para ver si tu doble es un entero.En caso de que así fuera, puedes convertirlo en un número entero.Para el segundo caso: Intenta reemplazar
new DecimalFormat("#.00");
connew DecimalFormat("0.00");
System.out.println(String.format("%.2f",20.3794));imprimirá 20.38