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.

Respostas:


528

Você pode usar:

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

Veja também os javadocs


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);

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

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


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>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.