none
Número por Extenso em C#

    Question

  • OLÁ.estou usando VS05 ASP.NET C#

    se eu tenho um número dentro de um txt, exemplo: 2.

    existe alguma função em c# que pegue este numero e jogue-o em outro txt ou em uma variavel por extenso??

     

    2 > dois

     

    obrigado!!

    Wednesday, January 16, 2008 4:02 PM

Answers

  • Eu fiz este código afim de pegar um valor de reais em numeros e escrever por extenso.
         
            //Passar uma string formatada em c com o String.Format o valor máximo é 999 bilhões, não esquesa o ' ,00 '
            public string valorExtenso(string wvalor){
                string[] wunidade ={""," e um"," e dois"," e trez"," e quatro"," e cinco"," e seis"," e sete"," e oito"," e nove"};
                string[] wdezes = {""," e onze"," e doze"," e treze"," e quatorze"," e quinze"," e dezesseis"," e dezessete"," e dezoito"," e dezenove"};
                string[] wdezenas = {""," e dez"," e vinte"," e trinta"," e quarenta"," e cinquenta"," e sessenta"," e setenta"," e oitenta"," e noventa"};
                string[] wcentenas = {""," e cento"," e duzentos"," e trezentos"," e quatrocentos"," e quinhentos"," e seiscentos"," e setecentos"," e oitocentos"," e novecentos"};
                string[] wplural = {" bilhões"," milhões"," mil",""};
                string[] wsingular = {" bilhão"," milhão"," mil",""};
                string wextenso = "";
                string wfracao;
                wvalor = wvalor.Replace("R$","");
                string wnumero = wvalor.Replace(",","").Trim();
                wnumero = wnumero.Replace(".","").PadLeft(14,'0');
                if(Int64.Parse(wnumero.Substring(0,12)) > 0){
                    for(int i=0;i<4;i++){
                        wfracao = wnumero.Substring(i*3,3);
                        if(int.Parse(wfracao) != 0){
                            if(int.Parse(wfracao.Substring(0,3)) == 100) wextenso += " e cem";
                            else{
                                wextenso += wcentenas[int.Parse(wfracao.Substring(0,1))];
                                if(int.Parse(wfracao.Substring(1,2)) > 10 &&int.Parse(wfracao.Substring(1,2)) < 20)wextenso += wdezes[int.Parse(wfracao.Substring(2,1))];
                                else{
                                    wextenso += wdezenas[int.Parse(wfracao.Substring(1,1))];
                                    wextenso += wunidade[int.Parse(wfracao.Substring(2,1))];
                                }
                            }
                            if(int.Parse(wfracao) > 1)wextenso += wpluralIdea;
                            else wextenso += wsingularIdea;
                        }
                    }
                    if(Int64.Parse(wnumero.Substring(0,12)) > 1) wextenso += " reais";
                    else wextenso += " real";
                }
                wfracao = wnumero.Substring(12,2);
                if(int.Parse(wfracao) > 0){
                    if(int.Parse(wfracao.Substring(0,2)) > 10 &&int.Parse(wfracao.Substring(0,2)) < 20) wextenso = wextenso  + wdezes[int.Parse(wfracao.Substring(1,1))];
                    else{
                        wextenso += wdezenas[int.Parse(wfracao.Substring(0,1))];
                        wextenso += wunidade[int.Parse(wfracao.Substring(1,1))];
                    }
                    if(int.Parse(wfracao) > 1) wextenso += " centavos";
                    else wextenso += " centavo";
                }
                if(wextenso != "") wextenso = wextenso.Substring(3,1).ToUpper()  + wextenso.Substring(4);
                else wextenso = "Nada";
                return wextenso;
            }


    Friday, January 18, 2008 6:55 PM

All replies

  • Wednesday, January 16, 2008 5:48 PM
  • opa vleu cara

    copiei todo o codigo em cada .cs

    porem da uns erros, tipo

     

    impossible convert int to int []

     

    oq fazer?

    Thursday, January 17, 2008 1:50 PM
  • Eu fiz este código afim de pegar um valor de reais em numeros e escrever por extenso.
         
            //Passar uma string formatada em c com o String.Format o valor máximo é 999 bilhões, não esquesa o ' ,00 '
            public string valorExtenso(string wvalor){
                string[] wunidade ={""," e um"," e dois"," e trez"," e quatro"," e cinco"," e seis"," e sete"," e oito"," e nove"};
                string[] wdezes = {""," e onze"," e doze"," e treze"," e quatorze"," e quinze"," e dezesseis"," e dezessete"," e dezoito"," e dezenove"};
                string[] wdezenas = {""," e dez"," e vinte"," e trinta"," e quarenta"," e cinquenta"," e sessenta"," e setenta"," e oitenta"," e noventa"};
                string[] wcentenas = {""," e cento"," e duzentos"," e trezentos"," e quatrocentos"," e quinhentos"," e seiscentos"," e setecentos"," e oitocentos"," e novecentos"};
                string[] wplural = {" bilhões"," milhões"," mil",""};
                string[] wsingular = {" bilhão"," milhão"," mil",""};
                string wextenso = "";
                string wfracao;
                wvalor = wvalor.Replace("R$","");
                string wnumero = wvalor.Replace(",","").Trim();
                wnumero = wnumero.Replace(".","").PadLeft(14,'0');
                if(Int64.Parse(wnumero.Substring(0,12)) > 0){
                    for(int i=0;i<4;i++){
                        wfracao = wnumero.Substring(i*3,3);
                        if(int.Parse(wfracao) != 0){
                            if(int.Parse(wfracao.Substring(0,3)) == 100) wextenso += " e cem";
                            else{
                                wextenso += wcentenas[int.Parse(wfracao.Substring(0,1))];
                                if(int.Parse(wfracao.Substring(1,2)) > 10 &&int.Parse(wfracao.Substring(1,2)) < 20)wextenso += wdezes[int.Parse(wfracao.Substring(2,1))];
                                else{
                                    wextenso += wdezenas[int.Parse(wfracao.Substring(1,1))];
                                    wextenso += wunidade[int.Parse(wfracao.Substring(2,1))];
                                }
                            }
                            if(int.Parse(wfracao) > 1)wextenso += wpluralIdea;
                            else wextenso += wsingularIdea;
                        }
                    }
                    if(Int64.Parse(wnumero.Substring(0,12)) > 1) wextenso += " reais";
                    else wextenso += " real";
                }
                wfracao = wnumero.Substring(12,2);
                if(int.Parse(wfracao) > 0){
                    if(int.Parse(wfracao.Substring(0,2)) > 10 &&int.Parse(wfracao.Substring(0,2)) < 20) wextenso = wextenso  + wdezes[int.Parse(wfracao.Substring(1,1))];
                    else{
                        wextenso += wdezenas[int.Parse(wfracao.Substring(0,1))];
                        wextenso += wunidade[int.Parse(wfracao.Substring(1,1))];
                    }
                    if(int.Parse(wfracao) > 1) wextenso += " centavos";
                    else wextenso += " centavo";
                }
                if(wextenso != "") wextenso = wextenso.Substring(3,1).ToUpper()  + wextenso.Substring(4);
                else wextenso = "Nada";
                return wextenso;
            }


    Friday, January 18, 2008 6:55 PM
  • perfeito cara valeu meeeeesmo

    abraaaço

    Friday, January 18, 2008 7:22 PM
  • Acabei de fazer um.
    Recebe no maximo 12 digitos, sem decimais e retorna o valor em escudos por extenso e devidamente formatado.

    using System;
    using System.Drawing;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;


    using Microsoft.VisualBasic;

    public partial class teste : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
          
        }

       protected void TextBox1_TextChanged(object sender, EventArgs e)
        {
            //recebe maximo 12 digitos, sem casas decimais
        //coloque o id 'TextBox1' no textbox

            string wfracao, sequencia = "", wnumero = "", wvalor = TextBox1.Text;
            string[] wunidade ={ "", " e um", " e dois", " e três", " e quatro", " e cinco", " e seis", " e sete", " e oito", " e nove" };
            string[] wdezes = { "", " e onze", " e doze", " e treze", " e quatorze", " e quinze", " e dezasseis", " e dezassete", " e dezoito", " e dezanove" };
            string[] wdezenas = { "", " e dez", " e vinte", " e trinta", " e quarenta", " e cinquenta", " e sessenta", " e setenta", " e oitenta", " e noventa" };
            string[] wcentenas = { "", " e cento", " e duzentos", " e trezentos", " e quatrocentos", " e quinhentos", " e seiscentos", " e setecentos", " e oitocentos", " e novecentos" };
            string[] wplural = { " mil milhões", " milhões", " mil", "" };
            string wextenso = "";

            if (wvalor.Length <= 12)
            {
                wnumero = wvalor.PadLeft(12, '0');

                if (Int64.Parse(wnumero.Substring(0, 12)) > 0)
                {
                    for (int i = 0; i < 4; i++)
                    {
                        wfracao = wnumero.Substring(i * 3, 3);
                        if (int.Parse(wfracao) != 0)
                        {
                            if (int.Parse(wfracao.Substring(0, 3)) == 100)
                                sequencia += " e cem";
                            else
                            {

                                if ((int.Parse(wfracao.Substring(0, 3))) >= 100)
                                    sequencia += wcentenas[int.Parse(wfracao.Substring(0, 1))];


                                if ((int.Parse(wfracao.Substring(1, 2))) >= 20 || (int.Parse(wfracao.Substring(1, 2))) == 10)
                                    sequencia += wdezenas[int.Parse(wfracao.Substring(1, 1))];
                                if (int.Parse(wfracao.Substring(1, 2)) > 10 && int.Parse(wfracao.Substring(1, 2)) < 20)
                                    sequencia += wdezes[int.Parse(wfracao.Substring(2, 1))];
                                else
                                    if ((int.Parse(wfracao.Substring(2, 1))) < 10)
                                        if (wfracao == "001" && (i == 0 || i == 2))
                                            sequencia += "";
                                        else
                                            sequencia += wunidade[int.Parse(wfracao.Substring(2, 1))];

                            }

                            if ((int.Parse(wfracao.Substring(0, 3))) >= 1)
                                if (wfracao == "001" && i == 1)
                                    sequencia += " milhão";
                                else
                                    sequencia += wpluralIdea;
                            if (i == 1 || i == 2)
                                sequencia = sequencia.Substring(0, 3).Replace("e", ",") + sequencia.Substring(3); ;

                            wextenso += sequencia;
                            sequencia = "";
                        }
                    }
                    if (Int64.Parse(wnumero.Substring(0, 12)) > 1)
                        wextenso += " escudos";
                    else wextenso += " escudo";
                }
                wfracao = wnumero.Substring(10, 2);

                if (wextenso != "")
                    if (wextenso.Substring(1, 1) == "m")
                        wextenso = wextenso.Substring(1, 1).ToUpper() + wextenso.Substring(2);
                    else
                        wextenso = wextenso.Substring(3, 1).ToUpper() + wextenso.Substring(4);
                else
                    wextenso = "0 escudo";

                Label1.Text = wextenso;
                Label1.ForeColor = Color.Blue;
            }
            else
            {
                Label1.Text = "O valor ultrapassa os 12 digitos";
                Label1.ForeColor = Color.Red;
            }
        }
    }

    Tuesday, December 16, 2008 12:47 PM
  • Idea [1]
    Thursday, December 18, 2008 4:03 AM
  • Salvou minha vida esse código, oque matou foi essa luzinha Idea, demorei para descobrir que era isso  [ i ]
    Thursday, December 18, 2008 4:09 AM
  • Eu fiz este código afim de pegar um valor de reais em numeros e escrever por extenso.
         
            //Passar uma string formatada em c com o String.Format o valor máximo é 999 bilhões, não esquesa o ' ,00 '
            public string valorExtenso(string wvalor){
                string[] wunidade ={""," e um"," e dois"," e trez"," e quatro"," e cinco"," e seis"," e sete"," e oito"," e nove"};
                string[] wdezes = {""," e onze"," e doze"," e treze"," e quatorze"," e quinze"," e dezesseis"," e dezessete"," e dezoito"," e dezenove"};
                string[] wdezenas = {""," e dez"," e vinte"," e trinta"," e quarenta"," e cinquenta"," e sessenta"," e setenta"," e oitenta"," e noventa"};
                string[] wcentenas = {""," e cento"," e duzentos"," e trezentos"," e quatrocentos"," e quinhentos"," e seiscentos"," e setecentos"," e oitocentos"," e novecentos"};
                string[] wplural = {" bilhões"," milhões"," mil",""};
                string[] wsingular = {" bilhão"," milhão"," mil",""};
                string wextenso = "";
                string wfracao;
                wvalor = wvalor.Replace("R$","");
                string wnumero = wvalor.Replace(",","").Trim();
                wnumero = wnumero.Replace(".","").PadLeft(14,'0');
                if(Int64.Parse(wnumero.Substring(0,12)) > 0){
                    for(int i=0;i<4;i++){
                        wfracao = wnumero.Substring(i*3,3);
                        if(int.Parse(wfracao) != 0){
                            if(int.Parse(wfracao.Substring(0,3)) == 100) wextenso += " e cem";
                            else{
                                wextenso += wcentenas[int.Parse(wfracao.Substring(0,1))];
                                if(int.Parse(wfracao.Substring(1,2)) > 10 &&int.Parse(wfracao.Substring(1,2)) < 20)wextenso += wdezes[int.Parse(wfracao.Substring(2,1))];
                                else{
                                    wextenso += wdezenas[int.Parse(wfracao.Substring(1,1))];
                                    wextenso += wunidade[int.Parse(wfracao.Substring(2,1))];
                                }
                            }
                            if(int.Parse(wfracao) > 1)wextenso += wpluralIdea;
                            else wextenso += wsingularIdea;
                        }
                    }
                    if(Int64.Parse(wnumero.Substring(0,12)) > 1) wextenso += " reais";
                    else wextenso += " real";
                }
                wfracao = wnumero.Substring(12,2);
                if(int.Parse(wfracao) > 0){
                    if(int.Parse(wfracao.Substring(0,2)) > 10 &&int.Parse(wfracao.Substring(0,2)) < 20) wextenso = wextenso  + wdezes[int.Parse(wfracao.Substring(1,1))];
                    else{
                        wextenso += wdezenas[int.Parse(wfracao.Substring(0,1))];
                        wextenso += wunidade[int.Parse(wfracao.Substring(1,1))];
                    }
                    if(int.Parse(wfracao) > 1) wextenso += " centavos";
                    else wextenso += " centavo";
                }
                if(wextenso != "") wextenso = wextenso.Substring(3,1).ToUpper()  + wextenso.Substring(4);
                else wextenso = "Nada";
                return wextenso;
            }


    galera.. sei que faz tempo, porem essa função funcionou legal para mim, anão ser pelo pequeno código que falta que está como emotico....

    que seria justamente 

                            if(int.Parse(wfracao) > 1)wextenso += wplural?; 
                            else wextenso += wsingular?;

    gostaria de saber o resultado disso, pois  minha string está retornando só

    tipo R$ 30,45

    retorna TrintaSystemString reais e quarenta e cinco centavos

     

     

    Corrigindo a pergunta para resposta... 

     

    Para quem estiver com o mesmo problema que o meu, que o pc está vendo esta interrogação como um emotivos,    

                            if(int.Parse(wfracao) > 1)wextenso += wplural?
                            else wextenso += wsingular?;

     

    a resposta é :

    wextenso += wplural[i]

    se estiver errado... favor corrigir :)



    Friday, July 22, 2011 4:40 PM
  • Márcio


    É antigo mas tá valendo.

    Comigo funcionou corretamente. Fiz a alteração ^^ e show de bola!

    Thursday, January 22, 2015 2:33 PM
  • Mesmo sendo antigo, mais existe muita procura por essa função, então vai ai minha contribuição.

            /// <summary>
            /// autor: Vilson Vitalino Alves
            /// </summary>
            /// <param name="valor"></param>
            /// <returns></returns>
            public static string DecimalToExtenso(Decimal valor)
            {
                string[] struni = new string[] { "", "Um", "Dois", "Tres", "Quatro", "Cinco", "Seis", "Sete", "Oito", "Nove", "Dez", "Onze", "Doze", "Treze", "Quatorze", "Quinze", "Dezessis", "Dezessete", "Dezoito", "Dezenove", "Vinte" };
                string[] strdez = new string[] { "", "", "Vinte", "Trinta", "Quarenta", "Cinquenta", "Sessenta", "Setenta", "Oitenta", "Noventa" };
                List<string[]> strcen = new List<string[]>() { new string[] { "", "" }, new string[] { "Cem", "Cento" }, new string[] { "Duzentos", "Duzentos" }, new string[] { "Trezentos", "Trezentos" }, new string[] { "Quatrocentos", "Quatrocentos" }, new string[] { "Quinhentos", "Quinhentos" }, new string[] { "Seiscentos", "Seiscentos" }, new string[] { "Setecentos", "Setecentos" }, new string[] { "Oitocentos", "Oitocentos" }, new string[] { "Novecentos", "Novecentos" } };
                List<string[]> moeda = new List<string[]>() { new string[] { " Trilhao", " Trilhoes" }, new string[] { " Bilhao", " Bilhoes" }, new string[] { " Milhao", " Milhoes" }, new string[] { " Mil", " Mil" }, new string[] { " Real", " Reais" }, new string[] { " Centavo", " Centavos" }, };
                List<string[]> result = new List<string[]>();
                string[] arrValor = Decimal.Round(valor,2).ToString("0|0|0,0|0|0,0|0|0,0|0|0,0|0|0.0|0").Replace(",", ",0|").Replace(",", ".").Split('.');
                for (int i = arrValor.Length - 1; i >= 0; i--)
                {
                    string[] z = arrValor[i].Split('|');
                    int a = Convert.ToInt32(z[0]);
                    int b = Convert.ToInt32(z[1]);
                    int c = Convert.ToInt32(z[2]);
                    int d = Convert.ToInt32(b.ToString() + c.ToString());
                    int k = Convert.ToInt32(a.ToString() + b.ToString() + c.ToString());
                    string r = (d >= 1 && d <= 20) ? string.Format("{0}", k == 0 ? "" : struni[d]) : string.Format("{0}{1}{2}", strdez[b], c > 0 ? " e " : "", k == 0 ? "" : struni[c]);
                    r = k < 100 ? r : string.Format("{0}{1}{2}", strcen[a][d == 0 ? 0 : 1], d == 0 ? "" : " e ", r);
                    result.Add(new string[] { i.ToString(), k.ToString(), r, " e ", moeda[i][k == 1 ? 0 : 1] });
                }
                if (Convert.ToInt32(result[1][1]) == 0)
                {
                    string xmoeda = result[1][4];
                    for (int i = 2; i <= result.Count - 1; i++)
                    {
                        if (Convert.ToInt32(result[i][1]) > 0)
                        {
                            result[i][4] += " " + (i == 3 || i == 4 || i == 5 ? " de " : "") + xmoeda;
                            result[i][3] = " e ";
                            break;
                        }
                    }
                }
                for (int i = result.Count - 1; i >= 0; i--) { if (Convert.ToInt32(result[i][1]) == 0) result.Remove(result[i]); }
                result[0][3] = "";
                for (int i = 2; i <= result.Count - 1; i++) { result[i][3] = ", "; }
                string extenso = "";
                for (int i = 0; i <= result.Count - 1; i++) { extenso = result[i][2] + result[i][4] + result[i][3] + extenso; }
                return extenso.Replace("  ", " ").Replace("  ", " ").Replace("  ", " ").Replace("  ", " ").Replace("  ", " ");
            }

    Saturday, September 03, 2016 5:08 PM