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 como 20.00.En este caso no necesito .00 al final, debería imprimirse como 20 solo.
  • Lo mismo para este número 0.019 se imprime .02 entonces para esto necesito tener 0 delante de . entonces 0.02 debería imprimirse.

¿Es posible hacer esto?

¿Fue útil?

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"); con new DecimalFormat("0.00");

System.out.println(String.format("%.2f",20.3794));imprimirá 20.38

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top