Oi,

tenho esta anexada aí..


----Original Message Follows----
From: "Daniel Brazil" <[EMAIL PROTECTED]>
Reply-To: [EMAIL PROTECTED]
To: <[EMAIL PROTECTED]>
Subject: Re: [java-list] Valores por extenso
Date: Mon, 3 Dec 2001 22:28:05 -0300

Oi Paulo,

Tem alguma coisa que pode ajudar no endereco 
http://sites.netscape.net/brazildaniel/jmj.htm, em informatica/java,  espero 
ajudar!

Daniel Brazil


   ----- Original Message -----
   From: Paulo Roberto B. Medeiros
   To: [EMAIL PROTECTED]
   Sent: Monday, December 03, 2001 3:54 PM
   Subject: [java-list] Valores por extenso


   Pessoal,

   Estou precisando de uma função para gerar valores por extenso em Java.
   Alguém tem?

   Agradeço antecipadamente.

   Paulo.



_________________________________________________________________
Chegou o novo MSN Explorer. Instale já. É gratuito! 
http://explorer.msn.com.br
  public String f_extenso(String as_valor,boolean feminino)
  {
    // Descrição : Função para descrever determinado valor numérico em
    //             texto extenso.
    //
    // Sintax....: f_Extenso (as_valor)
    //
    // Argumentos: as_valor -> String contendo o número que se deseja
    //                         descrever em texto extenso.
    //
    // Retorno...: Texto por extenso do valor numérico.
    //
    
//////////////////////////////////////////////////////////////////////////

    String   ls_und_val[ ], ls_dez_val[ ], ls_cen_val[ ], ls_mil_val[ ],
             ls_valor="", ls_txt_extenso="", ls_grp_extenso="" ;
    int      li_tam=0, li_numgrp_3=0, li_i=0, li_posgrp_3=0,
             li_valgrp=0,li_digito=0,li_id_mil=0, li_contgrp=0 ;


    // Preenchimento dos Vetores para pesquisa do texto descritivo para
    // cada fator numérico, diretamente sem teste ou condições...

    ls_und_val= new String[10];
    ls_und_val[0] =         " 0"  ;
    ls_und_val[1] =         " UM"  ;
    ls_und_val[2] =       " DOIS"  ;
    ls_und_val[3] =       " TRES"  ;
    ls_und_val[4] =     " QUATRO"  ;
    ls_und_val[5] =      " CINCO"  ;
    ls_und_val[6] =       " SEIS"  ;
    ls_und_val[7] =       " SETE"  ;
    ls_und_val[8] =       " OITO"  ;
    ls_und_val[9] =       " NOVE"  ;

    ls_dez_val = new String[20];
    ls_dez_val[0] =        " 0" ;
    ls_dez_val[1] =        " 0" ;
    ls_dez_val[10] =        " DEZ" ;
    ls_dez_val[ 2] =      " VINTE" ;
    ls_dez_val[ 3] =     " TRINTA" ;
    ls_dez_val[ 4] =   " QUARENTA" ;
    ls_dez_val[ 5] =  " CINQUENTA" ;
    ls_dez_val[ 6] =   " SESSENTA" ;
    ls_dez_val[ 7] =    " SETENTA" ;
    ls_dez_val[ 8] =    " OITENTA" ;
    ls_dez_val[ 9] =    " NOVENTA" ;
    ls_dez_val[11] =       " ONZE" ;
    ls_dez_val[12] =       " DOZE" ;
    ls_dez_val[13] =      " TREZE" ;
    ls_dez_val[14] =   " QUATORZE" ;
    ls_dez_val[15] =     " QUINZE" ;
    ls_dez_val[16] =  " DEZESSEIS" ;
    ls_dez_val[17] =  " DEZESSETE" ;
    ls_dez_val[18] =    " DEZOITO" ;
    ls_dez_val[19] =   " DEZENOVE" ;

    ls_cen_val = new String[12];
    ls_cen_val[ 0] =          " 0" ;
    ls_cen_val[ 1] =          " CEM" ;
    ls_cen_val[ 2] =     " DUZENTOS" ;
    ls_cen_val[ 3] =    " TREZENTOS" ;
    ls_cen_val[ 4] = " QUATROCENTOS" ;
    ls_cen_val[ 5] =   " QUINHENTOS" ;
    ls_cen_val[ 6] =   " SEISCENTOS" ;
    ls_cen_val[ 7] =   " SETECENTOS" ;
    ls_cen_val[ 8] =   " OITOCENTOS" ;
    ls_cen_val[ 9] =   " NOVECENTOS" ;
    ls_cen_val[11] =        " CENTO" ;

    ls_mil_val=new String[16];
    ls_mil_val[ 0] =          "0"  ;
    ls_mil_val[ 6] =          "0"  ;
    ls_mil_val[ 7] =          "0"  ;
    ls_mil_val[ 8] =          "0"  ;
    ls_mil_val[ 9] =          "0"  ;
    ls_mil_val[10] =          "0"  ;

    ls_mil_val[ 1] =          ""  ;
    ls_mil_val[ 2] =       " MIL" ;
    ls_mil_val[ 3] =    " MILHAO" ;
    ls_mil_val[ 4] =    " BILHAO" ;
    ls_mil_val[ 5] =   " TRILHAO" ;


    ls_mil_val[11] =          ""  ;
    ls_mil_val[12] =       " MIL" ;
    ls_mil_val[13] =   " MILHÕES" ;
    ls_mil_val[14] =   " BILHÕES" ;
    ls_mil_val[15] =  " TRILHÕES" ;

    if(feminino)
    {
      ls_und_val[1] =        " UMA"  ;
      ls_und_val[2] =       " DUAS"  ;
    }

    try
    {

      // Calcula o número de grupos de 3 dígitos que o valor possui,
      // pois a cada grupo, a descrição do valor segue o mesmo padrão.
      as_valor = (new 
Integer(Float.valueOf(as_valor).intValue()).toString());
      li_tam = as_valor.length();
      if (li_tam%3 == 0)
        li_numgrp_3 = li_tam/3; //int
      else
        li_numgrp_3 = (li_tam/3) + 1;//int


      // Efetua a varredura do valor a cada 3 dígitos, efetuando a
      // descrição em extenso de cada grupo separadamente.
      ls_valor = new String(as_valor);
      li_id_mil = 0;     // Identificador de faixas acima da milhar...
      for (li_i = li_numgrp_3 ;li_i>=1; li_i--)
      {
          li_id_mil ++;    // Passa para próxima casa milhar...
          ls_grp_extenso = "";   // Inicializa variável descritiva.

          // Separa os três últimos dígitos do valor na variável de
        // processamento "StrGrp", separando os dígitos restantes
          // na mesma variável "ls_valor".
        li_posgrp_3 = ls_valor.length() - 2;
            if (li_posgrp_3 > 1)
        {
                li_valgrp = 
Integer.valueOf(ls_valor.substring(li_posgrp_3-1,ls_valor.length())).intValue();
                ls_valor = ls_valor.substring(0,li_posgrp_3-1);
        }
        else
                  li_valgrp = Integer.valueOf(ls_valor).intValue();


        // Se o valor for zero, passa para o próximo grupo...
        if (li_valgrp == 0)
          continue;

        // Verificação do dígito da centena...
              li_digito = li_valgrp/100; //int
            li_valgrp = li_valgrp - li_digito*100;  // Atualiza a variável
                                                                                       
 // com o valor restante.
              if (li_digito > 0)
        {
                // Se for uma centena, verifica se há mais dígitos
                    // para identificar se é CEM ou CENTO.
                if ((li_digito == 1) && (li_valgrp > 0))
                        li_digito+= 10;

                  // Identifica no vetor o texto descritivo para o dígito.
                ls_grp_extenso = ls_cen_val[li_digito];

                // Se houver mais dígitos, de antemão acrescenta a
                  // conjunção "e".
                if (li_valgrp > 0)
                        ls_grp_extenso += " E";
      }

        // Verificação do dígito da dezena...
            // Se estiver no intervalo 10-19, termina o processamento aqui...
          if (li_valgrp >= 10 && li_valgrp <= 19)
                  ls_grp_extenso += ls_dez_val[li_valgrp] ;
      else
      {
                    li_digito = li_valgrp/10 ;//int
                  li_valgrp = li_valgrp - li_digito*10;  // Atualiza a variável
                                                                                       
   // com o valor restante.
                if (li_digito > 0)
        {
                        // Identifica no vetor o texto descritivo para o dígito.
                          ls_grp_extenso += ls_dez_val[li_digito];

                        // Se houver mais dígitos, de antemão acrescenta a
                          // conjunção "e".
                        if (li_valgrp > 0)
                                ls_grp_extenso += " E";
                  }



                // Verificação do dígito da unidade...
                if (li_valgrp > 0)
                        ls_grp_extenso += ls_und_val[li_valgrp];

        }

              // Terminada a descrição do número referente ao grupo atual
        // de três dígitos, deve-se verificar se encontra em alguma
            // faixa acima da milhar, para completar a descrição do valor.
            if (li_valgrp == 1)
                  // Se valor unitário, a descrição será no singular...
                ls_grp_extenso += ls_mil_val[li_id_mil];
        else
                    // Se for valor maior, a descrição será no plural...
                  ls_grp_extenso += ls_mil_val[li_id_mil+10];


        // Atualiza o contador de loops efetuados com valores descritos.
              li_contgrp ++;

        // Atualiza o Texto final descritivo do valor total...
              if (ls_txt_extenso.equals(""))
                ls_txt_extenso = ls_grp_extenso;
        else
        {
                  // Se for o penúltimo grupo, deve-se usar a conjunção "e",
                    // ao invés da vígula...
                  if (li_contgrp == 2)
                        ls_txt_extenso = ls_grp_extenso + " E" + ls_txt_extenso;
          else
                        ls_txt_extenso = ls_grp_extenso + "," + ls_txt_extenso;
            }
      }
    }
    catch(Exception e)
    {
      System.out.println("Excecao na f_extenso:"+e.toString());
    }
    return ls_txt_extenso.trim();


  }


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