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]
-------------------------------------------------------------------------

Responder a