Revision: 65574
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at December 23, 2013 22:40 by gabrielrbnet
Initial Code
public static class Extenso
{
public enum TipoValorExtenso
{
Monetario,
Porcentagem,
Decimal
}
public static string toExtenso(double Valor, TipoValorExtenso tipoValorExtenso)
{
decimal valorEscrever = new decimal(Valor);
return toExtenso(valorEscrever, tipoValorExtenso);
}
// O método toExtenso recebe um valor do tipo decimal
public static string toExtenso(decimal valor, TipoValorExtenso tipoValorExtenso)
{
if (valor <= 0 | valor >= 1000000000000000)
throw new ArgumentOutOfRangeException("Valor não suportado pelo sistema. Valor: " + valor);
string strValor = String.Empty;
strValor = valor.ToString("000000000000000.00#");
//strValor = valor.ToString("{0:0.00#}");
string valor_por_extenso = string.Empty;
int qtdCasasDecimais =
strValor.Substring(strValor.IndexOf(',') + 1, strValor.Length - (strValor.IndexOf(',') + 1)).Length;
bool existemValoresAposDecimal = Convert.ToInt32(strValor.Substring(16, qtdCasasDecimais)) > 0;
for (int i = 0; i <= 15; i += 3)
{
var parte = strValor.Substring(i, 3);
// se parte contém vÃrgula, pega a substring com base na quantidade de casas decimais.
if (parte.Contains(','))
{
parte = strValor.Substring(i+1, qtdCasasDecimais);
}
valor_por_extenso += escreva_parte(Convert.ToDecimal(parte));
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)
{
switch (tipoValorExtenso)
{
case TipoValorExtenso.Monetario:
valor_por_extenso += " REAL";
break;
case TipoValorExtenso.Porcentagem:
if (existemValoresAposDecimal == false)
valor_por_extenso += " PORCENTO";
break;
case TipoValorExtenso.Decimal:
break;
default:
throw new ArgumentOutOfRangeException("tipoValorExtenso");
}
}
else if (Convert.ToInt64(strValor.Substring(0, 15)) > 1)
{
switch (tipoValorExtenso)
{
case TipoValorExtenso.Monetario:
valor_por_extenso += " REAIS";
break;
case TipoValorExtenso.Porcentagem:
if (existemValoresAposDecimal == false)
valor_por_extenso += " PORCENTO";
break;
case TipoValorExtenso.Decimal:
break;
default:
throw new ArgumentOutOfRangeException("tipoValorExtenso");
}
}
if (Convert.ToInt32(strValor.Substring(16, 2)) > 0 && valor_por_extenso != string.Empty)
{
switch (tipoValorExtenso)
{
case TipoValorExtenso.Monetario:
valor_por_extenso += " E ";
break;
case TipoValorExtenso.Porcentagem:
valor_por_extenso += " VÃRGULA ";
break;
case TipoValorExtenso.Decimal:
break;
default:
throw new ArgumentOutOfRangeException("tipoValorExtenso");
}
}
}
if (i == 15)
if (Convert.ToInt32(strValor.Substring(16, qtdCasasDecimais)) == 1)
{
switch (tipoValorExtenso)
{
case TipoValorExtenso.Monetario:
valor_por_extenso += " CENTAVO";
break;
case TipoValorExtenso.Porcentagem:
valor_por_extenso += " CENTAVO";
break;
case TipoValorExtenso.Decimal:
break;
default:
throw new ArgumentOutOfRangeException("tipoValorExtenso");
}
}
else if (Convert.ToInt32(strValor.Substring(16, qtdCasasDecimais)) > 1)
{
switch (tipoValorExtenso)
{
case TipoValorExtenso.Monetario:
valor_por_extenso += " CENTAVOS";
break;
case TipoValorExtenso.Porcentagem:
valor_por_extenso += " PORCENTO";
break;
case TipoValorExtenso.Decimal:
break;
default:
throw new ArgumentOutOfRangeException("tipoValorExtenso");
}
}
}
return valor_por_extenso;
}
private static string escreva_parte(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;
}
}
}
Initial URL
http:\\www.gabrielrb.net
Initial Description
Classe com método para conversão de porcentagem %, valor em Reais R$, e decimal em extenso.
Initial Title
Classe para conversão de valores em extenso
Initial Tags
Initial Language
C#