1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

conversor de valores monetários

Discussão em 'Programação' iniciada por SOAD84, 17 de Junho de 2009. (Respostas: 4; Visualizações: 3445)

  1. 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
     
  2. jpaulino

    jpaulino Power Member

    Podes ver este exemplo em VB.NET

    VB.NET: Converter Números para Extenso (Euros)

    Peço desculpa por estar um pouco mal formatado, mas está em remodelação :)

    Podes converter para C# ou criar um DLL em VB.NET e usar no C#.

    Espero que ajude!
     
  3. 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
     
  4. 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: 22 de Junho de 2009

Partilhar esta Página