Bom, aqui vai uma classe q faz isso. Para testar, execute: Extenso <numero>
Luiz Ricardo > "Paulo Roberto B. Medeiros" wrote: > > Pessoal, > > Estou precisando de uma função para gerar valores por extenso em Java. > Alguém tem? > > Agradeço antecipadamente. > > Paulo. >
/** * @author Luiz Ricardo Belem Santos - 2001 */ public class Extenso { private static final String[] unidade = { "um", "dois", "três", "quatro", "cinco", "seis", "sete", "oito", "novo", "dez", "onze", "doze", "treze", "quatorze", "quinze", "dezesseis", "dezessete", "dezoito", "dezenove" }; private static final String[] dezena = { "vinte", "trinta", "quarenta", "cinquenta", "sessenta", "setenta", "oitenta", "noventa" }; private static final String[] centena = {"cento", "duzentos", "trezentos", "quatrocentos", "quinhentos", "seiscentos", "setecentos", "oitocentos", "novecentos" }; private static final String[] casa = {"mil", "milhão(ões)", "bilhão(ões)", "trilhão(ões)", "quatrilhão(ões)", "quintilhão(ões)", "sextilhão(ões)", "septilhão(ões)" }; private String number; public Extenso(String number) { this.number = number; } public String escrevaExtenso() { int resto = number.length() % 3; int quociente = number.length() / 3; int numIteracoes = (resto == 0) ? quociente : quociente + 1; StringBuffer result = new StringBuffer(); for (int i = 0; i < numIteracoes; i++) { String str = ""; int tam = (resto != 0 && i == 0) ? resto : 3; str = number.substring(0, tam); number = number.substring(tam, number.length()); if (str.length() == 1) { result.append(escreverUnidade(str)); } else if (str.length() == 2) { result.append(escreverDezena(str)); } else if (str.length() == 3) { result.append(escreverCentena(str)); } if (i < numIteracoes - 1) { result.append(" ").append(casa[numIteracoes - 2 - i]); if (!number.startsWith("0")) { result.append(" e "); } } } return result.toString(); } private String escreverUnidade(String str) { return unidade[Integer.parseInt(str) - 1]; } private String escreverDezena(String str) { StringBuffer sb = new StringBuffer(); if (str.startsWith("1")) { sb.append(escreverUnidade(str)); } else { if (!str.startsWith("0")) { int ind = Integer.parseInt(str.substring(0, 1)); sb.append(dezena[ind - 2]); } if (str.charAt(1) != '0') { int ind = Integer.parseInt(str.substring(1, 2)); if (!str.startsWith("0")) { sb.append(" e "); } sb.append(unidade[ind - 1]); } } return sb.toString(); } private String escreverCentena(String str) { StringBuffer sb = new StringBuffer(); if (str.equalsIgnoreCase("100")) { sb.append("cem"); } else { if (!str.startsWith("0")) { int ind = Integer.parseInt(str.substring(0,1)); sb.append(centena[ind - 1]); } if (!str.endsWith("00")) { sb.append(" e ").append(escreverDezena(str.substring(1,3))); } } return sb.toString(); } public static void main(String[] args) { Extenso e = new Extenso(args[0]); System.out.println(e.escrevaExtenso()); } }
------------------------------ LISTA SOUJAVA ---------------------------- http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm para sair da lista: envie email para [EMAIL PROTECTED] -------------------------------------------------------------------------