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