Come formattare un numero 0..9 da visualizzare con 2 cifre (NON è una data)


215

Vorrei mostrare sempre un numero inferiore a 100 con 2 cifre (esempio: 03, 05, 15 ...)

Come posso aggiungere lo 0 senza usare un condizionale per verificare se è inferiore a 10?

Devo aggiungere il risultato a un'altra stringa, quindi non posso usare printf.

Risposte:


528

Puoi usare:

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

Vedi anche i javadocs


1
Cosa succede se myNumber è un doppio?
Fra

3
@Fra, quindi useresti String.format("%02.0f", myNumber)se non vuoi i numeri dopo il punto decimale
beny23

Per coloro che vogliono leggere in modo specifico sulla sintassi del formato stringa: Format String Syntax
Pony

Questo genererà un avviso Linter Android "L'uso implicito della locale predefinita è una fonte comune di bug: utilizzare String.format (Locale, ...) invece"
Christopher Stock

1
@ChristopherStock Questo è un problema completamente separato, dovuto all'uso della locale predefinita corretta del dispositivo su cui è in esecuzione l'app: puoi ignorarla o risolverla, ma è correlata solo ad Android e alle versioni locali. Niente a che vedere con l'attuale formattazione delle stringhe
Radu

55

Se è necessario stampare il numero, è possibile utilizzare printf

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

Puoi usare

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

o

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

o

(""+(100+num)).substring(1);

2
L'uso di un formato è di gran lunga il più lento, ma è più chiaro e meno improbabile che vada orribilmente storto. ad es. se num è -1. ;)
Peter Lawrey,

42

Puoi usare questo:

NumberFormat formatter = new DecimalFormat("00");  
String s = formatter.format(1); // ----> 01

Questa dovrebbe essere la risposta accettata! Il risultato della soluzione tramite String.format può variare a causa delle impostazioni internazionali. (s. Avviso Linter Android "L'uso implicito della locale predefinita è una fonte comune di bug: Usa String.format (Locale, ...))
Christopher Stock

3

La classe String include le capacità di formato:

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

per la documentazione completa, ecco il doc


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

2

Nelle risorse Android è piuttosto semplice

<string name="smth">%1$02d</string>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.