conversor de valores monetários

SOAD84

Membro
boas,

alguém conhece uma função, classe ou dll (em C#) para converter valores monetário, em que é enviado o valor e é devolvida uma string com o valor por extenso.

por exemplo:

INPUT -> 20456,78

OUTPUT -> Vinte mil quatrocentos e cinquenta e seis euros e setenta e oito centimos.

cumps
 
Parece-me servir, mas não sei VB... mas vou tentar a conversão para C#.

entretanto se alguém souber de algo compartilhem ;-)


cumps e obrigado
 
já consegui "transformar" o tal codigo em VB para C#...
vou postar aqui o código para quem precisar dele em C# e o possa melhorar, eu já o testei e tive de emendar algumas coisas, mas ainda pode ter falhas.

Assim aqui vai:
Código:
public string NumberToEuro(decimal number)
    {
        int cent = 0;
        try
        {
            // se for =0 retorna 0 eros
            if (number == 0)
            {
                return "Zero Euros";
            }
            // Verifica a parte decimal, ou seja, os cêntimos
            cent = Convert.ToInt32(decimal.Round((number - (int)number) * 100, MidpointRounding.ToEven));
            // Verifica apenas a parte inteira
            //number = Convert.ToInt32(number);
            number = (int)number;
            // Caso existam cêntimos
            if (cent > 0)
            {
                // Caso seja 1 não coloca "euros" mas sim "euro"
                if (number == 1)
                {
                    return "Um Euro e " + getDecimal(Convert.ToByte(cent)) + "Cêntimos";
                }
                // Caso o valor seja inferior a 1 euro
                else if (number == 0)
                {
                    return getDecimal(Convert.ToByte(cent)) + "Cêntimos";
                }
                else
                {
                    return getInteger(number) + "Euros e " + getDecimal(Convert.ToByte(cent)) + "Cêntimos";
                }
            }
            else
            {
                // Caso seja 1 não coloca "euros" mas sim "euro"
                if (number == 1)
                {
                    return "Um Euro";
                }
                else
                {
                    return getInteger(number) + "Euros";
                }
            }
        }
        catch (Exception ex)
        {
            return "";
        }
    }

    public string getDecimal(byte number)
    {
        try
        {
            Convert.ToInt32(number);

            if(number == 0)
            {
                return "";
            }

            if(number >= 1 && number <= 19)
            {
                string[] strArray = {"Um", "Dois", "Três", "Quatro", "Cinco", "Seis", "Sete", "Oito", "Nove", "Dez", 
                "Onze", "Doze", "Treze", "Quatorze", "Quinze", "Dezasseis", "Dezassete", "Dezoito", "Dezanove"};

                return strArray[number - 1] + " ";
            }

            if(number >= 20 && number <= 99)
            {
                string[] strArray = {"Vinte", "Trinta", "Quarenta", "Cinquenta", "Sessenta", "Setenta", "Oitenta", "Noventa"};

                if ((number % 10) == 0)
                {
                    return strArray[number / 10 - 2] + " ";
                }
                else
                {
                    return strArray[number / 10 - 2] + " e " + getDecimal(Convert.ToByte(number % 10)) + " ";
                }
            }

            else
            {
                return "";
            }
        }

        catch(Exception ex)
        {
            return "";
        }
    }


    public string getInteger(decimal number)
    {

        try
        {
            number = (int)number;

            if(number < 0)
            {
                return "-" + getInteger(-number);
            }

            if(number == 0)
            {
                return "";
            }

            if(number >= 1 && number <=19)
            {
                string[] strArray = { "Um", "Dois", "Três", "Quatro", "Cinco", "Seis", "Sete", "Oito", "Nove", "Dez", 
            "Onze", "Doze", "Treze", "Quatorze", "Quinze", "Dezasseis", "Dezassete", "Dezoito", "Dezanove" };

                return strArray[Convert.ToInt32(number) - 1] + " ";
            }

            if(number >=20 && number <=99)
            {
                string[] strArray = { "Vinte", "Trinta", "Quarenta", "Cinquenta", "Sessenta", "Setenta", "Oitenta", "Noventa" };

                if ((number % 10) == 0)
                {
                    return strArray[Convert.ToInt32(number) / 10 - 2] + " ";
                }
                else
                {
                    return strArray[Convert.ToInt32(number) / 10 - 2] + " e " + getInteger(number % 10) + " ";
                }
            }

            if(number == 100)
            {
                return "Cem ";
            }

            if(number >=101 && number <=999)
            {
                string[] strArray = { "Cento", "Duzentos", "Trezentos", "Quatrocentos", "Quinhentos", "Seiscentos", "Setecentos", "Oitocentos", "Novecentos" };

                if ((number % 100) == 0)
                {
                    return strArray[Convert.ToInt32(number) / 100 - 1] + " ";
                }
                else
                {
                    return strArray[Convert.ToInt32(number) / 100 - 1] + " e " + getInteger(number % 100) + " ";
                }
            }

            if(number >=1000 && number <=1999)
            {
                int resto = Convert.ToInt32(number) % 1000;

                if(resto == 0)
                {
                    return "Mil ";
                }
                else
                {
                    if(resto <= 100)
                    {
                        return "Mil e " + getInteger(number % 1000);
                    }
                    
                    else
                    {
                        return "Mil, " + getInteger(number % 1000);
                    }
                }
            }


            if(number >= 2000 && number <= 999999)
            {
                int resto = Convert.ToInt32(number) % 1000;

                if(resto == 0)
                {
                    return getInteger(number / 1000) + "Mil ";
                }
                else
                {
                    if(resto <= 100)
                    {
                        return getInteger(number / 1000) + "Mil e " + getInteger(number % 1000);
                    }
                    
                    else
                    {
                        return getInteger(number / 1000) + "Mil, " + getInteger(number % 1000);
                    }
                }
            }


            if(number >= 1000000 && number <= 1999999)
            {
                int resto = Convert.ToInt32(number) % 1000000;

                if(resto == 0)
                {
                    return "Um Milhão ";
                }
                else
                {
                    if(resto <= 100)
                    {
                        return getInteger(number / 1000000) + "Milhão e " + getInteger(number % 1000000);
                    }
                    
                    else
                    {
                        return getInteger(number / 1000000) + "Milhão, " + getInteger(number % 1000000);
                    }
                }
            }


            if(number >= 2000000 && number <= 999999999)
            {
                int resto = Convert.ToInt32(number) % 1000000;

                if(resto == 0)
                {
                    return getInteger(number / 1000000) + " Milhões ";
                }
                else
                {
                    if(resto <= 100)
                    {
                        return getInteger(number / 1000000) + "Milhões e " + getInteger(number % 1000000);
                    }
                    
                    else
                    {
                        return getInteger(number / 1000000) + "Milhões, " + getInteger(number % 1000000);
                    }
                }
            }

            if(number >= 1000000000 && number <= 1999999999)
            {
                int resto = Convert.ToInt32(number) % 1000000000;

                if(resto == 0)
                {
                    return "Um Bilião ";
                }
                else
                {
                    if(resto <= 100)
                    {
                        return getInteger(number / 1000000000) + "Bilião e " + getInteger(number % 1000000000);
                    }
                    
                    else
                    {
                        return getInteger(number / 1000000000) + "Bilião, " + getInteger(number % 1000000000);
                    }
                }
            }


            else
            {
                int resto = Convert.ToInt32(number) % 1000000000;

                if(resto == 0)
                {
                    return getInteger(number / 1000000000) + " Biliões ";
                }
                else
                {
                    if(resto <= 100)
                    {
                        return getInteger(number / 1000000000) + "Biliões e " + getInteger(number % 1000000000);
                    }
                    
                    else
                    {
                        return getInteger(number / 1000000000) + "Biliões, " + getInteger(number % 1000000000);
                    }
                }
            }   

        }

        catch(Exception ex)
        {
            return "";
        }
    }

// aqui está o evento do botão que chama a função

protected void Converte_Click(object sender, EventArgs e)
    {
        decimal numero = Convert.ToDecimal(TextBox1.Text);
        string numero_a_converter = NumberToEuro(numero);

        Label1.Text = numero_a_converter.ToUpper();
    }
------------------------------------------------------------------------------------------


Cumsps e muito obrigado ao jpaulino pelas dicas
 
Última edição pelo moderador:
Back
Topo