C# - Convertendo Números para valores em extenso (Dica)
Este artigo é a versão para a linguagem C# do meu artigo : VB.NET - Convertendo Números para valores Reais em extenso
Abra o Visual Studio 2012 Express For Windows Desktop e crie um novo projeto do tipo Windows Forms Application com o nome ValorPorExtenso.
A seguir no formulário padrão form1.cs inclua os seguintes controles:
Defina o seguinte leiaute no formulário:
No menu PROJECT clique em Add Class e informe o nome Conversor.cs. Vamos criar uma classe chamada Conversor contendo dois métodos estáticos:
O código desta classe pode ser visto a seguir. (Este código não é de minha autoria foi criado por Ivan Guimarães Meirelles)
using System; using System.Text.RegularExpressions; namespace ValorPorExtenso { public class Conversor { // O método EscreverExtenso recebe um valor do tipo decimal public static string EscreverExtenso(decimal valor) { if (valor <= 0 | valor >= 1000000000000000) return "Valor não suportado pelo sistema."; else { string strValor = valor.ToString("000000000000000.00"); string valor_por_extenso = string.Empty; for (int i = 0; i <= 15; i += 3) { valor_por_extenso += Escrever_Valor_Extenso(Convert.ToDecimal(strValor.Substring(i, 3))); if (i == 0 & valor_por_extenso != string.Empty) { if (Convert.ToInt32(strValor.Substring(0, 3)) == 1) valor_por_extenso += " TRILHÃO" + ((Convert.ToDecimal(strValor.Substring(3, 12)) > 0) ? " E " : string.Empty); else if (Convert.ToInt32(strValor.Substring(0, 3)) > 1) valor_por_extenso += " TRILHÕES" + ((Convert.ToDecimal(strValor.Substring(3, 12)) > 0) ? " E " : string.Empty); } else if (i == 3 & valor_por_extenso != string.Empty) { if (Convert.ToInt32(strValor.Substring(3, 3)) == 1) valor_por_extenso += " BILHÃO" + ((Convert.ToDecimal(strValor.Substring(6, 9)) > 0) ? " E " : string.Empty); else if (Convert.ToInt32(strValor.Substring(3, 3)) > 1) valor_por_extenso += " BILHÕES" + ((Convert.ToDecimal(strValor.Substring(6, 9)) > 0) ? " E " : string.Empty); } else if (i == 6 & valor_por_extenso != string.Empty) { if (Convert.ToInt32(strValor.Substring(6, 3)) == 1) valor_por_extenso += " MILHÃO" + ((Convert.ToDecimal(strValor.Substring(9, 6)) > 0) ? " E " : string.Empty); else if (Convert.ToInt32(strValor.Substring(6, 3)) > 1) valor_por_extenso += " MILHÕES" + ((Convert.ToDecimal(strValor.Substring(9, 6)) > 0) ? " E " : string.Empty); } else if (i == 9 & valor_por_extenso != string.Empty) if (Convert.ToInt32(strValor.Substring(9, 3)) > 0) valor_por_extenso += " MIL" + ((Convert.ToDecimal(strValor.Substring(12, 3)) > 0) ? " E " : string.Empty); if (i == 12) { if (valor_por_extenso.Length > 8) if (valor_por_extenso.Substring(valor_por_extenso.Length - 6, 6) == "BILHÃO" | valor_por_extenso.Substring(valor_por_extenso.Length - 6, 6) == "MILHÃO") valor_por_extenso += " DE"; else if (valor_por_extenso.Substring(valor_por_extenso.Length - 7, 7) == "BILHÕES" | valor_por_extenso.Substring(valor_por_extenso.Length - 7, 7) == "MILHÕES" | valor_por_extenso.Substring(valor_por_extenso.Length - 8, 7) == "TRILHÕES") valor_por_extenso += " DE"; else if (valor_por_extenso.Substring(valor_por_extenso.Length - 8, 8) == "TRILHÕES") valor_por_extenso += " DE"; if (Convert.ToInt64(strValor.Substring(0, 15)) == 1) valor_por_extenso += " REAL"; else if (Convert.ToInt64(strValor.Substring(0, 15)) > 1) valor_por_extenso += " REAIS"; if (Convert.ToInt32(strValor.Substring(16, 2)) > 0 && valor_por_extenso != string.Empty) valor_por_extenso += " E "; } if (i == 15) if (Convert.ToInt32(strValor.Substring(16, 2)) == 1) valor_por_extenso += " CENTAVO"; else if (Convert.ToInt32(strValor.Substring(16, 2)) > 1) valor_por_extenso += " CENTAVOS"; } return valor_por_extenso; } } static string Escrever_Valor_Extenso(decimal valor) { if (valor <= 0) return string.Empty; else { string montagem = string.Empty; if (valor > 0 & valor < 1) { valor *= 100; } string strValor = valor.ToString("000"); int a = Convert.ToInt32(strValor.Substring(0, 1)); int b = Convert.ToInt32(strValor.Substring(1, 1)); int c = Convert.ToInt32(strValor.Substring(2, 1)); if (a == 1) montagem += (b + c == 0) ? "CEM" : "CENTO"; else if (a == 2) montagem += "DUZENTOS"; else if (a == 3) montagem += "TREZENTOS"; else if (a == 4) montagem += "QUATROCENTOS"; else if (a == 5) montagem += "QUINHENTOS"; else if (a == 6) montagem += "SEISCENTOS"; else if (a == 7) montagem += "SETECENTOS"; else if (a == 8) montagem += "OITOCENTOS"; else if (a == 9) montagem += "NOVECENTOS"; if (b == 1) { if (c == 0) montagem += ((a > 0) ? " E " : string.Empty) + "DEZ"; else if (c == 1) montagem += ((a > 0) ? " E " : string.Empty) + "ONZE"; else if (c == 2) montagem += ((a > 0) ? " E " : string.Empty) + "DOZE"; else if (c == 3) montagem += ((a > 0) ? " E " : string.Empty) + "TREZE"; else if (c == 4) montagem += ((a > 0) ? " E " : string.Empty) + "QUATORZE"; else if (c == 5) montagem += ((a > 0) ? " E " : string.Empty) + "QUINZE"; else if (c == 6) montagem += ((a > 0) ? " E " : string.Empty) + "DEZESSEIS"; else if (c == 7) montagem += ((a > 0) ? " E " : string.Empty) + "DEZESSETE"; else if (c == 8) montagem += ((a > 0) ? " E " : string.Empty) + "DEZOITO"; else if (c == 9) montagem += ((a > 0) ? " E " : string.Empty) + "DEZENOVE"; } else if (b == 2) montagem += ((a > 0) ? " E " : string.Empty) + "VINTE"; else if (b == 3) montagem += ((a > 0) ? " E " : string.Empty) + "TRINTA"; else if (b == 4) montagem += ((a > 0) ? " E " : string.Empty) + "QUARENTA"; else if (b == 5) montagem += ((a > 0) ? " E " : string.Empty) + "CINQUENTA"; else if (b == 6) montagem += ((a > 0) ? " E " : string.Empty) + "SESSENTA"; else if (b == 7) montagem += ((a > 0) ? " E " : string.Empty) + "SETENTA"; else if (b == 8) montagem += ((a > 0) ? " E " : string.Empty) + "OITENTA"; else if (b == 9) montagem += ((a > 0) ? " E " : string.Empty) + "NOVENTA"; if (strValor.Substring(1, 1) != "1" & c != 0 & montagem != string.Empty) montagem += " E "; if (strValor.Substring(1, 1) != "1") if (c == 1) montagem += "UM"; else if (c == 2) montagem += "DOIS"; else if (c == 3) montagem += "TRÊS"; else if (c == 4) montagem += "QUATRO"; else if (c == 5) montagem += "CINCO"; else if (c == 6) montagem += "SEIS"; else if (c == 7) montagem += "SETE"; else if (c == 8) montagem += "OITO"; else if (c == 9) montagem += "NOVE"; return montagem; } } } } |
No evento KeyPress do TextBox - txtValor - somente permitimos a digitação de números , ponto e vírgula. Para isso vamos incluir o código a seguir no evento KeyPress do TextBox:
private void txtValor_KeyPress(object sender, KeyPressEventArgs e) { if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != ',') { e.Handled = true; } // somente permite um ponto decimal if (e.KeyChar == ',' && (sender as TextBox).Text.IndexOf(',') > -1) { e.Handled = true; } } |
Finalmente no evento Click do botão de comando - btnExtenso - vamos digitar o código a seguir que irá usar a classe Conversor criada no projeto:
private void btnExtenso_Click(object sender, EventArgs e) { try { decimal valor = Convert.ToDecimal(txtValor.Text); txtExtenso.Text = Conversor.EscreverExtenso(valor); } catch(Exception ex) { MessageBox.Show(ex.Message); } } |
Executando o projeto para um valor válido obtemos:
Um projeto muito simples mas que mostra como é fácil trabalhar com a linguagem C#.
O resto é com você...
Pegue o projeto completo aqui: ValorPorExtenso.zip
João 5:39 Examinais as Escrituras, porque julgais ter nelas a vida eterna; e são elas que dão testemunho de mim;
João 5:40 mas não quereis vir a mim para terdes vida!
João 5:41 Eu não recebo glória da parte dos homens;
João 5:42 mas bem vos conheço, que não tendes em vós o amor de Deus.
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Veja os
Destaques e novidades do
SUPER DVD Visual Basic (sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ? Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira... Quer aprender C# ?? Chegou o Super DVD C# com exclusivo material de suporte e vídeo aulas com curso básico sobre C#. Veja também os Cursos com vídeo aulas e projetos exemplos: |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#