Como escrever números por extenso?
Primeiramente o número (obtido como uma string) deve ser "desmontado" em diversas substrings onde se separem os dígitos correspondentes a unidade, dezena, centena, milhar etc. Se o número for obtido como inteiro ou real podem ser feitas divisões sucessivas por 10 e truncagens (Math.trunc())para obter-se o mesmo efeito.
Assim:
// valorLido é um objeto tipo String que // conterá o valor lido String valorLido = "1234"; // final é uma variável inteira que // contêm o comprimento da string valorLido int final = valorLido.length(); // desmontando a string em dígitos String unidade = valorLido.substring(final-1, final); String dezena = valorLido.substring(final-2, final-1); // convertendo substrings para inteiro: int valorUnidade = Integer.parseInt(unidade); int valorDezena = Integer.parseInt(dezena);
Separados e convertidos os dígitos basta escrever o número observando a mesma sequência que utilizaríamos ao ler um número. Para isto usamos vários comandos if ou switch:
String porExtenso = new String(""); switch (milhar) { case 1: porExtenso += "mil e "; break; case 2: porExtenso += "dois mil e "; break; // e assim por diante } switch (centena) { case 1: porExtenso += "cento e "; break; case 2: porExtenso += "duzentos e "; break; break; // e assim por diante } // depois para dezenas e unidades
A expressão:
porExtenso += "mil e ";
equivale a:
porExtenso = porExtenso + "mil e ";
e significa a concatenação da string que existe em porExtenso com o novo trecho especificado.