Como formatar um número 0..9 para exibir com 2 dígitos (NÃO é uma data)

215

Gostaria de mostrar sempre um número abaixo de 100 com 2 dígitos (exemplo: 03, 05, 15 ...)

Como posso acrescentar o 0 sem usar um condicional para verificar se ele tem menos de 10 anos?

Preciso anexar o resultado a outra String, para não poder usar printf.

realtebo
fonte

Respostas:

528

Você pode usar:

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

Veja também os javadocs

beny23
fonte
1
E se myNumber for duplo?
Fra
3
@Fra, então você usaria String.format("%02.0f", myNumber)se você não quer que os números depois do ponto decimal
beny23
Para aqueles que querem ler especificamente sobre a sintaxe formato string: string formato Sintaxe
Pony
Isso irá gerar um Linter Android Aviso "Implicitamente usando o locale padrão é uma fonte comum de erros: Use String.format (Locale, ...) em vez"
Christopher da
1
@ChristopherStock Esse é um problema completamente separado, relacionado ao uso do código de idioma padrão correto do dispositivo em que o aplicativo está sendo executado - você pode ignorá-lo ou corrigi-lo, mas isso está relacionado apenas ao Android e aos códigos de idioma. Nada a ver com a formatação seqüência real
Radu
55

Se precisar imprimir o número, use printf

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

Você pode usar

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

ou

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

ou

(""+(100+num)).substring(1);
Peter Lawrey
fonte
2
Usar um formato é de longe o mais lento, mas é mais claro e menos provável que dê terrivelmente errado. por exemplo, se num for -1. ;)
Peter Lawrey
42

Você pode usar isto:

NumberFormat formatter = new DecimalFormat("00");  
String s = formatter.format(1); // ----> 01
Daniel André
fonte
Essa deve ser a resposta aceita! O resultado da solução via String.format pode variar devido às configurações de localidade. (s. Aviso Linter Android "Implicitamente usando o locale padrão é uma fonte comum de erros: Use String.format (Locale, ...))
Christopher da
3

A classe String vem com as habilidades de formato:

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

para documentação completa, aqui está o documento

Grimmy
fonte
Ele diz #java.util.IllegalFormatConversionException: %d can't format java.lang.Double arguments
Pradeep Kumar Kushwaha
2

Nos recursos do Android, é bastante simples

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