GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Escrever valores por extenso


#1

Pessoal, alguém tem algum código para escrever valores por extenso? Algo do tipo:

Entrada: 1598.35
Saída: Um mil, quinhentos e noventa e oito Reais, trinta e cinco centavos.

Estou criando um, mas imagino que exista uma maneira mais prática e inteligente do que usar vetores e sair analisando o número usando o MOD...

Agradeço de antemão.


#2

Há muito tempo atrás alguém do GUJ tinha feito:
http://www.guj.com.br/forum/viewtopic.php?t=2556


#3
Eu criei uma função que usa vetores sem mod	
	//Passar uma string formatada em c com o String.Format
	public string valorExtenso(string wvalor){ 
		string[] wunidade ={""," e um"," e dois"," e trez"," e quatro"," e cinco"," e seis"," e sete"," e oito"," e nove"};
		string[] wdezes = {""," e onze"," e doze"," e treze"," e quatorze"," e quinze"," e dezesseis"," e dezessete"," e dezoito"," e dezenove"};
		string[] wdezenas = {""," e dez"," e vinte"," e trinta"," e quarenta"," e cinquenta"," e sessenta"," e setenta"," e oitenta"," e noventa"};
		string[] wcentenas = {""," e cento"," e duzentos"," e trezentos"," e quatrocentos"," e quinhentos"," e seiscentos"," e setecentos"," e oitocentos"," e novecentos"};
		string[] wplural = {" bilhões"," milhões"," mil",""};
		string[] wsingular = {" bilhão"," milhão"," mil",""};
		string wextenso = "";
		string wfracao;
		wvalor = wvalor.Replace("R$","");
		string wnumero = wvalor.Replace(",","").Trim();
		wnumero = wnumero.Replace(".","").PadLeft(14,'0');
		if(Int64.Parse(wnumero.Substring(0,12)) > 0){
			for(int i=0;i<4;i++){
				wfracao = wnumero.Substring(i*3,3);
				if(int.Parse(wfracao) != 0){
					if(int.Parse(wfracao.Substring(0,3)) == 100) wextenso += " e cem";
					else{
						wextenso += wcentenas[int.Parse(wfracao.Substring(0,1))];
						if(int.Parse(wfracao.Substring(1,2)) > 10 &&int.Parse(wfracao.Substring(1,2)) < 20)wextenso += wdezes[int.Parse(wfracao.Substring(2,1))];
						else{
							wextenso += wdezenas[int.Parse(wfracao.Substring(1,1))];
							wextenso += wunidade[int.Parse(wfracao.Substring(2,1))];
						}
					}
					if(int.Parse(wfracao) > 1)wextenso += wplural[i]; 
					else wextenso += wsingular[i];
				}
			}
			if(Int64.Parse(wnumero.Substring(0,12)) > 1) wextenso += " reais";
			else wextenso += " real";
		}
		wfracao = wnumero.Substring(12,2);
		if(int.Parse(wfracao) > 0){
			if(int.Parse(wfracao.Substring(0,2)) > 10 &&int.Parse(wfracao.Substring(0,2)) < 20) wextenso = wextenso  + wdezes[int.Parse(wfracao.Substring(1,1))];
			else{
				wextenso += wdezenas[int.Parse(wfracao.Substring(0,1))];
				wextenso += wunidade[int.Parse(wfracao.Substring(1,1))];
			}
			if(int.Parse(wfracao) > 1) wextenso += " centavos";
			else wextenso += " centavo";
		}
		if(wextenso != "") wextenso = wextenso.Substring(3,1).ToUpper()  + wextenso.Substring(4);
		else wextenso = "Nada";
		return wextenso;
	}

#4

Tenho esse exemplo:


#5

Só para deixar registrado, tem uma implementação disso em: http://github.com/jau/porextenso.

Exemplo de uso:

CurrencyWriter cw = new CurrencyWriter();
String extenso = cw.write(new BigDecimal("137.39");
System.out.println(extenso);

Resultado:

cento e trinta e sete reais e trinta e nove centavos

#6

Caraca, eu já fiz isso em VBA... pra escrever em espanhol huahuauhauh...


#7

Galera,

Algúem teria uma classe que escreva os números por extenso mais em dolares?

obrigado


#8

No meu projeto de utilidade tem em portugues, (http://www.guj.com.br/java/225445-opensutils-br4j---biblioteca-de-utilitarios-utils/1) se alguem tiver em ingles para adicionar na prox versão.. estaria ótimo!! abrçs


#9

Ola....

Tenho os seguintes numeros 27897359876000798000001 tenho que transformar esses numeros em um valor e não sei como se escreve por estenso. Alguem saberia me ajudar???

please


#10

Revivendo o topico ... alguem ainda tem esse .jar

estou fazendo um programa para prencher cheques automaticamente

vlw


#11

Peço licença aos colegas para postar o meu projeto

http://pedroabs.wordpress.com/2011/05/24/projeto-extenso-121-cento-e-vinte-e-um/


#12

Obrigado Amigo...

Fiz apenas algumas modificações para não imprimir "Reais" e "Centavos", do resto está perfeito.

Att
Douglas Junior


#13

Desculpa reviver este tópico, mas precisava agradecer as pessoas que forneceram estas soluções.

Estou usando está aqui, pois achei fácil de entender.

Obrigado novamente.


#14