Cómo formatear un número 0..9 para mostrarlo con 2 dígitos (NO es una fecha)

215

Me gustaría mostrar siempre un número inferior a 100 con 2 dígitos (ejemplo: 03, 05, 15 ...)

¿Cómo puedo agregar el 0 sin usar un condicional para verificar si es menor de 10?

Necesito agregar el resultado a otra Cadena, por lo que no puedo usar printf.

Realtebo
fuente

Respuestas:

528

Puedes usar:

String.format("%02d", myNumber)

Ver también los javadocs

beny23
fuente
1
¿Qué pasa si myNumber es un doble?
Fra
3
@Fra, entonces usarías String.format("%02.0f", myNumber)si no quieres los números después del punto decimal
beny23
Para aquellos que quieran leer específicamente sobre la sintaxis de formato de cadena: Sintaxis de cadena de formato
Pony
Esto generará una advertencia de Android Linter "El uso implícito de la configuración regional predeterminada es una fuente común de errores: utilice String.format (Configuración regional, ...) en su lugar"
Christopher Stock
1
@ChristopherStock Ese es un problema completamente diferente, que tiene que ver con el uso de la configuración regional predeterminada correcta del dispositivo en el que se ejecuta la aplicación; puede ignorarlo o arreglarlo, pero eso está relacionado solo con Android y las configuraciones regionales. Nada que ver con el formato de cadena real
Radu
55

Si necesita imprimir el número, puede usar printf

System.out.printf("%02d", num);

Puedes usar

String.format("%02d", num);

o

(num < 10 ? "0" : "") + num;

o

(""+(100+num)).substring(1);
Peter Lawrey
fuente
2
Usar un formato es, con mucho, el más lento, pero es más claro y es menos probable que salga terriblemente mal. por ejemplo, si num es -1. ;)
Peter Lawrey
42

Puedes usar esto:

NumberFormat formatter = new DecimalFormat("00");  
String s = formatter.format(1); // ----> 01
Daniel André
fuente
¡Esta debería ser la respuesta aceptada! El resultado de la solución a través de String.format puede variar debido a la configuración regional. (s. Advertencia de Android Linter "El uso implícito de la configuración regional predeterminada es una fuente común de errores: Use String.format (Configuración regional, ...))
Christopher Stock
3

La clase String viene con las habilidades de formato:

System.out.println(String.format("%02d", 5));

para documentación completa, aquí está el documento

Mugriento
fuente
Dicejava.util.IllegalFormatConversionException: %d can't format java.lang.Double arguments
Pradeep Kumar Kushwaha
2

En los recursos de Android es bastante simple

<string name="smth">%1$02d</string>
Vlad
fuente