Escrever valores por extenso

12 respostas
1112

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.

12 Respostas

Bani

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

L
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;
	}
Pedrosa

Tenho esse exemplo:

jau

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
renamed

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

ricardo.narezi

Galera,

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

obrigado

Priuli

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

B

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

mausexdd

Revivendo o topico … alguem ainda tem esse .jar

estou fazendo um programa para prencher cheques automaticamente

vlw

pedroabs

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/

douglasjunior

pedroabs:
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/

Obrigado Amigo…

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

Att
Douglas Junior

mapleplayer

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.

[quote=jau]
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

Obrigado novamente.

Criado 21 de maio de 2004
Ultima resposta 3 de out. de 2012
Respostas 12
Participantes 13