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