Пример #1
0
        // O método toExtenso recebe um valor do tipo decimal
        public string Converter(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);
        }
Пример #2
0
        public static string toExtenso(double Valor, TipoValorExtenso tipoValorExtenso)
        {
            decimal valorEscrever = new decimal(Valor);

            return(toExtenso(valorEscrever, tipoValorExtenso));
        }
Пример #3
0
        public static string toExtenso(double Valor, TipoValorExtenso tipoValorExtenso)
        {
            decimal valorEscrever = new decimal(Valor);

            return toExtenso(valorEscrever, tipoValorExtenso);
        }
Пример #4
0
        // 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, TipoValorExtenso tipoValor)
        {
            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)
                    {
                        if (tipoValor == TipoValorExtenso.DecimalFeminino)
                        {
                            montagem += "UMA";
                        }
                        else
                        {
                            montagem += "UM";
                        }
                    }
                    else if (c == 2)
                    {
                        if (tipoValor == TipoValorExtenso.DecimalFeminino)
                        {
                            montagem += "DUAS";
                        }
                        else
                        {
                            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);
            }
        }