none
Escrever Por Extenso.

    Question

  • Boa tarde galera,

     

    estou precisando escrever por extenso numeros...por exemplo $45,23

     

    Quarenta e cinco reais e vinte três centavos

     

    alguem tem alguma função que faz isso ou uma idéia??

     

     

     

    Obrigado

    Thursday, June 14, 2007 6:31 PM

Answers

  • Valeu ricardo achei essa aqui tambem  http://www.linhadecodigo.com.br/dicas.asp?id_dica=1287&sub=65

     

    está meio confuso mais está funcionando também...gostei tambem das procedures do segundo linK...

    agora acho que dá pra eu fazer o que eu quero....

     

    Galera acabei de dar uma "ajeitada na função" ela tinha muita coisa doida

     

    agora está aparentemente funcionando...

     

    e só copiar e colar e passar o valor.

     

    Está aí para quem trabalha com C# e VS 2005:

     

    public string Extenso_Valor(decimal pdbl_Valor)

    {

    string strValorExtenso = ""; //Variável que irá armazenar o valor por extenso do número informado

    string strNumero = ""; //Irá armazenar o número para exibir por extenso

    string strCentena = "";

    string strDezena = "";

    string strUnidade = "";

    decimal dblCentavos = 0;

    decimal dblValorInteiro = 0;

    int intContador = 0;

    bool bln_Bilhao = false;

    bool bln_Milhao = false;

    bool bln_Mil = false;

    bool bln_Real = false;

    bool bln_Unidade = false;

    //Verificar se foi informado um dado indevido

    if (pdbl_Valor == 0 || pdbl_Valor <= 0)

    {

    strValorExtenso = "Verificar se há valor negativo ou nada foi informado";

    }

    if (pdbl_Valor > (decimal)9999999999.99)

    {

    strValorExtenso = "Valor não suportado pela Função";

    }

    else //Entrada padrão do método

    {

    //Gerar Extenso Centavos

    dblCentavos = pdbl_Valor - (int)pdbl_Valor;

    //Gerar Extenso parte Inteira

    dblValorInteiro = (int)pdbl_Valor;

    if (dblValorInteiro > 0)

    {

    if (dblValorInteiro > 999)

    {

    bln_Mil = true;

    }

    if (dblValorInteiro > 999999)

    {

    bln_Milhao = true;

    bln_Mil = false;

    }

    if (dblValorInteiro > 999999999)

    {

    bln_Mil = false;

    bln_Milhao = false;

    bln_Bilhao = true;

    }

    for (int i = (dblValorInteiro.ToString().Trim().Length) - 1; i >= 0; i--)

    {

    // strNumero = Mid(dblValorInteiro.ToString().Trim(), (dblValorInteiro.ToString().Trim().Length - i) + 1, 1);

    strNumero = Mid(dblValorInteiro.ToString().Trim(), (dblValorInteiro.ToString().Trim().Length - i) - 1, 1);

    switch (i)

    { /*******/

    case 9: /*Bilhão*

    /*******/

    {

    strValorExtenso = fcn_Numero_Unidade(strNumero) + ((int.Parse(strNumero) > 1) ? " Bilhões de" : " Bilhão de");

    bln_Bilhao = true;

    break;

    }

    case 8: /********/

    case 5: //Centena*

    case 2: /********/

    {

    if (int.Parse(strNumero) > 0)

    {

    strCentena = Mid(dblValorInteiro.ToString().Trim(),(dblValorInteiro.ToString().Trim().Length - i) - 1, 3);

    if (int.Parse(strCentena) > 100 && int.Parse(strCentena) < 200)

    {

    strValorExtenso = strValorExtenso + " Cento e ";

    }

    else

    {

    strValorExtenso = strValorExtenso + " " + fcn_Numero_Centena(strNumero);

    }

    if (intContador == 8)

    {

    bln_Milhao = true;

    }

    else if (intContador == 5)

    {

    bln_Mil = true;

    }

    }

    break;

    }

    case 7: /*****************/

    case 4: //Dezena de Milhão*

    case 1: /*****************/

    {

    if (int.Parse(strNumero) > 0)

    {

    strDezena = Mid(dblValorInteiro.ToString().Trim(),(dblValorInteiro.ToString().Trim().Length - i) - 1, 2);//

    if (int.Parse(strDezena) > 10 && int.Parse(strDezena) < 20)

    {

    strValorExtenso = strValorExtenso + (Right(strValorExtenso, 5).Trim() == "entos" ? " e " : " ")

    + fcn_Numero_Dezena0(Right(strDezena, 1));//corrigido

    bln_Unidade = true;

    }

    else

    {

    strValorExtenso = strValorExtenso + (Right(strValorExtenso, 5).Trim() == "entos" ? " e " : " ")

    + fcn_Numero_Dezena1(Left(strDezena, 1));//corrigido

    bln_Unidade = false;

    }

    if (intContador == 7)

    {

    bln_Milhao = true;

    }

    else if (intContador == 4)

    {

    bln_Mil = true;

    }

    }

    break;

    }

    case 6: /******************/

    case 3: //Unidade de Milhão*

    case 0: /******************/

    {

    if (int.Parse(strNumero) > 0 && !bln_Unidade)

    {

    if ((Right(strValorExtenso, 5).Trim()) == "entos"

    || (Right(strValorExtenso, 3).Trim()) == "nte"

    || (Right(strValorExtenso, 3).Trim()) == "nta")

    {

    strValorExtenso = strValorExtenso + " e ";

    }

    else

    {

    strValorExtenso = strValorExtenso + " ";

    }

    strValorExtenso = strValorExtenso + fcn_Numero_Unidade(strNumero);

    }

    if (i == 6)

    {

    if (bln_Milhao || int.Parse(strNumero) > 0)

    {

    strValorExtenso = strValorExtenso + ((int.Parse(strNumero) == 1) && !bln_Unidade ? " Milhão de" : " Milhões de");

    bln_Milhao = true;

    }

    }

    if (i == 3)

    {

    if (bln_Mil || int.Parse(strNumero) > 0)

    {

    strValorExtenso = strValorExtenso + " Mil";

    bln_Mil = true;

    }

    }

    if (i == 0)

    {

    if ((bln_Bilhao && !bln_Milhao && !bln_Mil

    && Right((dblValorInteiro.ToString().Trim()), 3) == "0")

    || (!bln_Bilhao && bln_Milhao && !bln_Mil

    && Right((dblValorInteiro.ToString().Trim()), 3) == "0"))

    {

    strValorExtenso = strValorExtenso + " de ";

    }

    strValorExtenso = strValorExtenso + ((int.Parse(dblValorInteiro.ToString())) > 1 ? " Reais " : " Real ");

    }

    bln_Unidade = false;

    break;

    }

    }

    }//

    }

    if (dblCentavos > 0)

    {

    if ((Decimal.Parse(dblCentavos.ToString()) > 0) && (dblCentavos < (decimal)0.1))

    {

    strNumero = Right((Decimal.Round(dblCentavos, 2)).ToString().Trim(), 1);

    strValorExtenso = strValorExtenso + ((Decimal.Parse(dblCentavos.ToString()) > 0) ? " e " : " ")

    + fcn_Numero_Unidade(strNumero) + ((Decimal.Parse(strNumero) > 1) ? " Centavos " : " Centavo ");

    }

    else if (dblCentavos > (decimal)0.1 && dblCentavos < (decimal)0.2)

    {

    strNumero = Right(((Decimal.Round(dblCentavos, 2) - (decimal)0.1).ToString().Trim()), 1);

    strValorExtenso = strValorExtenso + ((Decimal.Parse(dblCentavos.ToString()) > 0) ? " e " : " ")

    + fcn_Numero_Dezena0(strNumero) + " Centavos ";

    }

    else

    {

    if (dblCentavos > 0) //0#

    {

    strNumero = Right(dblCentavos.ToString().Trim(), 2);//Mid(dblCentavos.ToString().Trim(), 0, 1);//

    strValorExtenso = strValorExtenso + ((int.Parse(strNumero) > 0) ? " e " : "")//((int.Parse(dblCentavos.ToString()) > 0) ? " e " : " ")

    + fcn_Numero_Dezena1(Left(strNumero, 1));

    if ((dblCentavos.ToString().Trim().Length) > 2)

    {

    strNumero = Right((Decimal.Round(dblCentavos, 2)).ToString().Trim(), 1);

    if (int.Parse(strNumero) > 0)

    {

    if (Mid(strValorExtenso.Trim(), strValorExtenso.Trim().Length - 2, 1) == "e")

    {

    strValorExtenso = strValorExtenso + " " + fcn_Numero_Unidade(strNumero);

    }

    else

    {

    strValorExtenso = strValorExtenso + " e " + fcn_Numero_Unidade(strNumero);

    }

    }

    }

    strValorExtenso = strValorExtenso + " Centavos ";

    }

    }

    }

    if (dblValorInteiro < 1) strValorExtenso = Mid(strValorExtenso.Trim(), 2, strValorExtenso.Trim().Length -

    2);

    }

    return strValorExtenso.Trim();

    }

     

    private string fcn_Numero_Dezena0(string pstrDezena0)

    {

    //Vetor que irá conter o número por extenso

    ArrayList array_Dezena0 = new ArrayList();

    array_Dezena0.Add("Onze");

    array_Dezena0.Add("Doze");

    array_Dezena0.Add("Treze");

    array_Dezena0.Add("Quatorze");

    array_Dezena0.Add("Quinze");

    array_Dezena0.Add("Dezesseis");

    array_Dezena0.Add("Dezessete");

    array_Dezena0.Add("Dezoito");

    array_Dezena0.Add("Dezenove");

    return array_Dezena0[ ((int.Parse(pstrDezena0)) - 1) ].ToString();

    }

     

    private string fcn_Numero_Dezena1(string pstrDezena1)

    {

    //Vetor que irá conter o número por extenso

    ArrayList array_Dezena1 = new ArrayList();

    array_Dezena1.Add("Dez");

    array_Dezena1.Add("Vinte");

    array_Dezena1.Add("Trinta");

    array_Dezena1.Add("Quarenta");

    array_Dezena1.Add("Cinquenta");

    array_Dezena1.Add("Sessenta");

    array_Dezena1.Add("Setenta");

    array_Dezena1.Add("Oitenta");

    array_Dezena1.Add("Noventa");

    return array_Dezena1[ ((int.Parse(pstrDezena1)) - 1) ].ToString();

    }

     

    private string fcn_Numero_Centena(string pstrCentena)

    {

    //Vetor que irá conter o número por extenso

    ArrayList array_Centena = new ArrayList();

    array_Centena.Add("Cem");

    array_Centena.Add("Duzentos");

    array_Centena.Add("Trezentos");

    array_Centena.Add("Quatrocentos");

    array_Centena.Add("Quinhentos");

    array_Centena.Add("Seiscentos");

    array_Centena.Add("Setecentos");

    array_Centena.Add("Oitocentos");

    array_Centena.Add("Novecentos");

    return array_Centena[ ((int.Parse(pstrCentena)) - 1) ].ToString();

    }

     

    private string fcn_Numero_Unidade(string pstrUnidade)

    {

    //Vetor que irá conter o número por extenso

    ArrayList array_Unidade = new ArrayList() ;

    array_Unidade.Add("Um");

    array_Unidade.Add("Dois");

    array_Unidade.Add("Três");

    array_Unidade.Add("Quatro");

    array_Unidade.Add("Cinco");

    array_Unidade.Add("Seis");

    array_Unidade.Add("Sete");

    array_Unidade.Add("Oito");

    array_Unidade.Add("Nove");

    return array_Unidade[ ((int.Parse(pstrUnidade)) - 1) ].ToString();

    }

     

    //Começa aqui os Métodos de Compatibilazação com VB 6 .........Left() Right() Mid()

    public static string Left(string param, int length)

    {

    //we start at 0 since we want to get the characters starting from the

    //left and with the specified lenght and assign it to a variable

    if (param == "")

    return "";

    string result = param.Substring(0, length);

    //return the result of the operation

    return result;

    }

     

    public static string Right(string param, int length)

    {

    //start at the index based on the lenght of the sting minus

    //the specified lenght and assign it a variable

    if (param == "")

    return "";

    string result = param.Substring(param.Length - length, length);

    //return the result of the operation

    return result;

    }

     

    public static string Mid(string param,int startIndex, int length)

    {

    //start at the specified index in the string ang get N number of

    //characters depending on the lenght and assign it to a variable

    string result = param.Substring(startIndex, length);

    //return the result of the operation

    return result;

    }

     

    public static string Mid(string param,int startIndex)

    {

    //start at the specified index and return all characters after it

    //and assign it to a variable

    string result = param.Substring(startIndex);

    //return the result of the operation

    return result;

    }

     

     

     

     

    Obrigado

    Thursday, June 14, 2007 8:51 PM

All replies

  • Valeu ricardo achei essa aqui tambem  http://www.linhadecodigo.com.br/dicas.asp?id_dica=1287&sub=65

     

    está meio confuso mais está funcionando também...gostei tambem das procedures do segundo linK...

    agora acho que dá pra eu fazer o que eu quero....

     

    Galera acabei de dar uma "ajeitada na função" ela tinha muita coisa doida

     

    agora está aparentemente funcionando...

     

    e só copiar e colar e passar o valor.

     

    Está aí para quem trabalha com C# e VS 2005:

     

    public string Extenso_Valor(decimal pdbl_Valor)

    {

    string strValorExtenso = ""; //Variável que irá armazenar o valor por extenso do número informado

    string strNumero = ""; //Irá armazenar o número para exibir por extenso

    string strCentena = "";

    string strDezena = "";

    string strUnidade = "";

    decimal dblCentavos = 0;

    decimal dblValorInteiro = 0;

    int intContador = 0;

    bool bln_Bilhao = false;

    bool bln_Milhao = false;

    bool bln_Mil = false;

    bool bln_Real = false;

    bool bln_Unidade = false;

    //Verificar se foi informado um dado indevido

    if (pdbl_Valor == 0 || pdbl_Valor <= 0)

    {

    strValorExtenso = "Verificar se há valor negativo ou nada foi informado";

    }

    if (pdbl_Valor > (decimal)9999999999.99)

    {

    strValorExtenso = "Valor não suportado pela Função";

    }

    else //Entrada padrão do método

    {

    //Gerar Extenso Centavos

    dblCentavos = pdbl_Valor - (int)pdbl_Valor;

    //Gerar Extenso parte Inteira

    dblValorInteiro = (int)pdbl_Valor;

    if (dblValorInteiro > 0)

    {

    if (dblValorInteiro > 999)

    {

    bln_Mil = true;

    }

    if (dblValorInteiro > 999999)

    {

    bln_Milhao = true;

    bln_Mil = false;

    }

    if (dblValorInteiro > 999999999)

    {

    bln_Mil = false;

    bln_Milhao = false;

    bln_Bilhao = true;

    }

    for (int i = (dblValorInteiro.ToString().Trim().Length) - 1; i >= 0; i--)

    {

    // strNumero = Mid(dblValorInteiro.ToString().Trim(), (dblValorInteiro.ToString().Trim().Length - i) + 1, 1);

    strNumero = Mid(dblValorInteiro.ToString().Trim(), (dblValorInteiro.ToString().Trim().Length - i) - 1, 1);

    switch (i)

    { /*******/

    case 9: /*Bilhão*

    /*******/

    {

    strValorExtenso = fcn_Numero_Unidade(strNumero) + ((int.Parse(strNumero) > 1) ? " Bilhões de" : " Bilhão de");

    bln_Bilhao = true;

    break;

    }

    case 8: /********/

    case 5: //Centena*

    case 2: /********/

    {

    if (int.Parse(strNumero) > 0)

    {

    strCentena = Mid(dblValorInteiro.ToString().Trim(),(dblValorInteiro.ToString().Trim().Length - i) - 1, 3);

    if (int.Parse(strCentena) > 100 && int.Parse(strCentena) < 200)

    {

    strValorExtenso = strValorExtenso + " Cento e ";

    }

    else

    {

    strValorExtenso = strValorExtenso + " " + fcn_Numero_Centena(strNumero);

    }

    if (intContador == 8)

    {

    bln_Milhao = true;

    }

    else if (intContador == 5)

    {

    bln_Mil = true;

    }

    }

    break;

    }

    case 7: /*****************/

    case 4: //Dezena de Milhão*

    case 1: /*****************/

    {

    if (int.Parse(strNumero) > 0)

    {

    strDezena = Mid(dblValorInteiro.ToString().Trim(),(dblValorInteiro.ToString().Trim().Length - i) - 1, 2);//

    if (int.Parse(strDezena) > 10 && int.Parse(strDezena) < 20)

    {

    strValorExtenso = strValorExtenso + (Right(strValorExtenso, 5).Trim() == "entos" ? " e " : " ")

    + fcn_Numero_Dezena0(Right(strDezena, 1));//corrigido

    bln_Unidade = true;

    }

    else

    {

    strValorExtenso = strValorExtenso + (Right(strValorExtenso, 5).Trim() == "entos" ? " e " : " ")

    + fcn_Numero_Dezena1(Left(strDezena, 1));//corrigido

    bln_Unidade = false;

    }

    if (intContador == 7)

    {

    bln_Milhao = true;

    }

    else if (intContador == 4)

    {

    bln_Mil = true;

    }

    }

    break;

    }

    case 6: /******************/

    case 3: //Unidade de Milhão*

    case 0: /******************/

    {

    if (int.Parse(strNumero) > 0 && !bln_Unidade)

    {

    if ((Right(strValorExtenso, 5).Trim()) == "entos"

    || (Right(strValorExtenso, 3).Trim()) == "nte"

    || (Right(strValorExtenso, 3).Trim()) == "nta")

    {

    strValorExtenso = strValorExtenso + " e ";

    }

    else

    {

    strValorExtenso = strValorExtenso + " ";

    }

    strValorExtenso = strValorExtenso + fcn_Numero_Unidade(strNumero);

    }

    if (i == 6)

    {

    if (bln_Milhao || int.Parse(strNumero) > 0)

    {

    strValorExtenso = strValorExtenso + ((int.Parse(strNumero) == 1) && !bln_Unidade ? " Milhão de" : " Milhões de");

    bln_Milhao = true;

    }

    }

    if (i == 3)

    {

    if (bln_Mil || int.Parse(strNumero) > 0)

    {

    strValorExtenso = strValorExtenso + " Mil";

    bln_Mil = true;

    }

    }

    if (i == 0)

    {

    if ((bln_Bilhao && !bln_Milhao && !bln_Mil

    && Right((dblValorInteiro.ToString().Trim()), 3) == "0")

    || (!bln_Bilhao && bln_Milhao && !bln_Mil

    && Right((dblValorInteiro.ToString().Trim()), 3) == "0"))

    {

    strValorExtenso = strValorExtenso + " de ";

    }

    strValorExtenso = strValorExtenso + ((int.Parse(dblValorInteiro.ToString())) > 1 ? " Reais " : " Real ");

    }

    bln_Unidade = false;

    break;

    }

    }

    }//

    }

    if (dblCentavos > 0)

    {

    if ((Decimal.Parse(dblCentavos.ToString()) > 0) && (dblCentavos < (decimal)0.1))

    {

    strNumero = Right((Decimal.Round(dblCentavos, 2)).ToString().Trim(), 1);

    strValorExtenso = strValorExtenso + ((Decimal.Parse(dblCentavos.ToString()) > 0) ? " e " : " ")

    + fcn_Numero_Unidade(strNumero) + ((Decimal.Parse(strNumero) > 1) ? " Centavos " : " Centavo ");

    }

    else if (dblCentavos > (decimal)0.1 && dblCentavos < (decimal)0.2)

    {

    strNumero = Right(((Decimal.Round(dblCentavos, 2) - (decimal)0.1).ToString().Trim()), 1);

    strValorExtenso = strValorExtenso + ((Decimal.Parse(dblCentavos.ToString()) > 0) ? " e " : " ")

    + fcn_Numero_Dezena0(strNumero) + " Centavos ";

    }

    else

    {

    if (dblCentavos > 0) //0#

    {

    strNumero = Right(dblCentavos.ToString().Trim(), 2);//Mid(dblCentavos.ToString().Trim(), 0, 1);//

    strValorExtenso = strValorExtenso + ((int.Parse(strNumero) > 0) ? " e " : "")//((int.Parse(dblCentavos.ToString()) > 0) ? " e " : " ")

    + fcn_Numero_Dezena1(Left(strNumero, 1));

    if ((dblCentavos.ToString().Trim().Length) > 2)

    {

    strNumero = Right((Decimal.Round(dblCentavos, 2)).ToString().Trim(), 1);

    if (int.Parse(strNumero) > 0)

    {

    if (Mid(strValorExtenso.Trim(), strValorExtenso.Trim().Length - 2, 1) == "e")

    {

    strValorExtenso = strValorExtenso + " " + fcn_Numero_Unidade(strNumero);

    }

    else

    {

    strValorExtenso = strValorExtenso + " e " + fcn_Numero_Unidade(strNumero);

    }

    }

    }

    strValorExtenso = strValorExtenso + " Centavos ";

    }

    }

    }

    if (dblValorInteiro < 1) strValorExtenso = Mid(strValorExtenso.Trim(), 2, strValorExtenso.Trim().Length -

    2);

    }

    return strValorExtenso.Trim();

    }

     

    private string fcn_Numero_Dezena0(string pstrDezena0)

    {

    //Vetor que irá conter o número por extenso

    ArrayList array_Dezena0 = new ArrayList();

    array_Dezena0.Add("Onze");

    array_Dezena0.Add("Doze");

    array_Dezena0.Add("Treze");

    array_Dezena0.Add("Quatorze");

    array_Dezena0.Add("Quinze");

    array_Dezena0.Add("Dezesseis");

    array_Dezena0.Add("Dezessete");

    array_Dezena0.Add("Dezoito");

    array_Dezena0.Add("Dezenove");

    return array_Dezena0[ ((int.Parse(pstrDezena0)) - 1) ].ToString();

    }

     

    private string fcn_Numero_Dezena1(string pstrDezena1)

    {

    //Vetor que irá conter o número por extenso

    ArrayList array_Dezena1 = new ArrayList();

    array_Dezena1.Add("Dez");

    array_Dezena1.Add("Vinte");

    array_Dezena1.Add("Trinta");

    array_Dezena1.Add("Quarenta");

    array_Dezena1.Add("Cinquenta");

    array_Dezena1.Add("Sessenta");

    array_Dezena1.Add("Setenta");

    array_Dezena1.Add("Oitenta");

    array_Dezena1.Add("Noventa");

    return array_Dezena1[ ((int.Parse(pstrDezena1)) - 1) ].ToString();

    }

     

    private string fcn_Numero_Centena(string pstrCentena)

    {

    //Vetor que irá conter o número por extenso

    ArrayList array_Centena = new ArrayList();

    array_Centena.Add("Cem");

    array_Centena.Add("Duzentos");

    array_Centena.Add("Trezentos");

    array_Centena.Add("Quatrocentos");

    array_Centena.Add("Quinhentos");

    array_Centena.Add("Seiscentos");

    array_Centena.Add("Setecentos");

    array_Centena.Add("Oitocentos");

    array_Centena.Add("Novecentos");

    return array_Centena[ ((int.Parse(pstrCentena)) - 1) ].ToString();

    }

     

    private string fcn_Numero_Unidade(string pstrUnidade)

    {

    //Vetor que irá conter o número por extenso

    ArrayList array_Unidade = new ArrayList() ;

    array_Unidade.Add("Um");

    array_Unidade.Add("Dois");

    array_Unidade.Add("Três");

    array_Unidade.Add("Quatro");

    array_Unidade.Add("Cinco");

    array_Unidade.Add("Seis");

    array_Unidade.Add("Sete");

    array_Unidade.Add("Oito");

    array_Unidade.Add("Nove");

    return array_Unidade[ ((int.Parse(pstrUnidade)) - 1) ].ToString();

    }

     

    //Começa aqui os Métodos de Compatibilazação com VB 6 .........Left() Right() Mid()

    public static string Left(string param, int length)

    {

    //we start at 0 since we want to get the characters starting from the

    //left and with the specified lenght and assign it to a variable

    if (param == "")

    return "";

    string result = param.Substring(0, length);

    //return the result of the operation

    return result;

    }

     

    public static string Right(string param, int length)

    {

    //start at the index based on the lenght of the sting minus

    //the specified lenght and assign it a variable

    if (param == "")

    return "";

    string result = param.Substring(param.Length - length, length);

    //return the result of the operation

    return result;

    }

     

    public static string Mid(string param,int startIndex, int length)

    {

    //start at the specified index in the string ang get N number of

    //characters depending on the lenght and assign it to a variable

    string result = param.Substring(startIndex, length);

    //return the result of the operation

    return result;

    }

     

    public static string Mid(string param,int startIndex)

    {

    //start at the specified index and return all characters after it

    //and assign it to a variable

    string result = param.Substring(startIndex);

    //return the result of the operation

    return result;

    }

     

     

     

     

    Obrigado

    Thursday, June 14, 2007 8:51 PM
  • Eu criei uma classe em C# para usar diretamente no SQL, de -99.999.999.999,99 ate 99.999.999.999,99 e vc pode passar um argumento (0/1) para Dólar/Real...

    os valores negarivos são exibidos entre parênteses!

    Ps. Também tenho esta mesma função toda em Inglês...

     

    Exemplo no SQL (vc menciaona diretamente na tablea, e 0 retorna Dólar, 1 retorna Real)

     

    Select Saldo, dbo.Extenso(Saldo,1) as [Extenso do Saldo] from Transacoes

     

    Retorna

    -150.07 (Cento e Cinqüenta Reais e Sete centavos)
      0.00 NULL
      0.01 Um centavo de Real
      0.30 Trinta centavos de Real

    1.00 Hum Real

    100000.00 Cem mil Reais
      300100.00 Trezentos mil e Cem Reais
      701011.00 Setecentos e Um mil Cento e Onze Reais
      856001.00 Oitocentos e Cinqüenta e Seis mil Seiscentos e Um Reais
      999999.00 Novecentos e Noventa e Nove mil Novecentos e Noventa e Nove Reais
      1000000.00 Hum milhão de Reais
      1002005.00 Hum milhão Dois mil e Cinco Reais
      1020803.00 Hum milhão Vinte mil Oitocentos e Três Reais
      3180565.00 Três milhões Cento e Oitenta mil Quinhentos e Sessenta e Cinco Reais
      4500000.01 Quatro milhões e Quinhentos mil Reais e Um centavo
      11000548.25 Onze milhões Quinhentos e Quarenta e Oito Reais e Vinte e Cinco centavos

    12345000000.00 Doze bilhões Trezentos e Quarenta e Cinco milhões de Reais

     99999999999.99 Noventa e Nove bilhões Novecentos e Noventa e Nove milhões Novecentos e Noventa e Nove mil Novecentos e Noventa e Nove Reais e Noventa e Nove centavos
      101999999999.99 Fora do limite de -$99,999,999,999.99 até $99,999,999,999.99

     

    Se interessar me diga que te envio o códio e os procedimentos apra inserir no SQL.

    Um Abraço,

    Marcio Abreu

    Tuesday, June 26, 2007 7:52 PM
  • Boa tarde Marcio, tudo bem ?

     

    Vc pode mandar pr´a mim, por favor ?

     

    Valeu !!!

     

    marcelo_blois@msn.com

     

    Até,

     

     

    Marcelo Blois

     

     

    Monday, August 06, 2007 7:37 PM
  •  Marcio Abreu wrote:

    Eu criei uma classe em C# para usar diretamente no SQL, de -99.999.999.999,99 ate 99.999.999.999,99 e vc pode passar um argumento (0/1) para Dólar/Real...

    os valores negarivos são exibidos entre parênteses!

    Ps. Também tenho esta mesma função toda em Inglês...

     

    Exemplo no SQL (vc menciaona diretamente na tablea, e 0 retorna Dólar, 1 retorna Real)

     

    Select Saldo, dbo.Extenso(Saldo,1) as [Extenso do Saldo] from Transacoes

     

    Retorna

    -150.07 (Cento e Cinqüenta Reais e Sete centavos)
      0.00 NULL
      0.01 Um centavo de Real
      0.30 Trinta centavos de Real

    1.00 Hum Real

    100000.00 Cem mil Reais
      300100.00 Trezentos mil e Cem Reais
      701011.00 Setecentos e Um mil Cento e Onze Reais
      856001.00 Oitocentos e Cinqüenta e Seis mil Seiscentos e Um Reais
      999999.00 Novecentos e Noventa e Nove mil Novecentos e Noventa e Nove Reais
      1000000.00 Hum milhão de Reais
      1002005.00 Hum milhão Dois mil e Cinco Reais
      1020803.00 Hum milhão Vinte mil Oitocentos e Três Reais
      3180565.00 Três milhões Cento e Oitenta mil Quinhentos e Sessenta e Cinco Reais
      4500000.01 Quatro milhões e Quinhentos mil Reais e Um centavo
      11000548.25 Onze milhões Quinhentos e Quarenta e Oito Reais e Vinte e Cinco centavos

    12345000000.00 Doze bilhões Trezentos e Quarenta e Cinco milhões de Reais

     99999999999.99 Noventa e Nove bilhões Novecentos e Noventa e Nove milhões Novecentos e Noventa e Nove mil Novecentos e Noventa e Nove Reais e Noventa e Nove centavos
      101999999999.99 Fora do limite de -$99,999,999,999.99 até $99,999,999,999.99

     

    Se interessar me diga que te envio o códio e os procedimentos apra inserir no SQL.

    Um Abraço,

    Marcio Abreu

     

    Márcio,

     

    Você poderia me enviar as funçoes (em português e inglês)?

     

    Grato,

     

    Adriano.

    Friday, October 19, 2007 1:56 PM
  • Marcio,  boas tarde.

     

    Podeira por gentileza me passar essa classe para colocar no meu SQL ...

     

    Obrigado

     

    mauricio@vgtinformatica.inf.br

     

    Friday, October 19, 2007 4:56 PM
  • Poderia me enviar uma cópia deste código ?

    Agradeço.

    Newton Filho

    newtonfilho@hotmail.com

    Wednesday, December 19, 2007 5:13 PM
  • Caro,

     

    Se puder enviar, ficaria grato também.

     

    rafarossa@gmail.com

     

    Abraço.

    Rafael.

     

    Monday, May 12, 2008 5:32 PM
  • Viva, Marcio

     

    Será que me pode enviar, as duas versões PT, EN?

     

    atletadi@gmail.com

     

    Obrigado,

     

    Thursday, July 17, 2008 11:23 AM
  • Márcio,

     

    Se puder me enviar as versões, também agradeço.

     

    rafaelrossa@hotmail.com

     

     

    Abraço.

     

    Thursday, July 17, 2008 11:42 AM
  • Eu criei uma classe em C# para usar diretamente no SQL, de -99.999.999.999,99 ate 99.999.999.999,99 e vc pode passar um argumento (0/1) para Dólar/Real...

    os valores negarivos são exibidos entre parênteses!

    Ps. Também tenho esta mesma função toda em Inglês...

     

    Exemplo no SQL (vc menciaona diretamente na tablea, e 0 retorna Dólar, 1 retorna Real)

     

    Select Saldo, dbo.Extenso(Saldo,1) as [Extenso do Saldo] from Transacoes

     

    Retorna

    -150.07 (Cento e Cinqüenta Reais e Sete centavos)
      0.00 NULL
      0.01 Um centavo de Real
      0.30 Trinta centavos de Real

    1.00 Hum Real

    100000.00 Cem mil Reais
      300100.00 Trezentos mil e Cem Reais
      701011.00 Setecentos e Um mil Cento e Onze Reais
      856001.00 Oitocentos e Cinqüenta e Seis mil Seiscentos e Um Reais
      999999.00 Novecentos e Noventa e Nove mil Novecentos e Noventa e Nove Reais
      1000000.00 Hum milhão de Reais
      1002005.00 Hum milhão Dois mil e Cinco Reais
      1020803.00 Hum milhão Vinte mil Oitocentos e Três Reais
      3180565.00 Três milhões Cento e Oitenta mil Quinhentos e Sessenta e Cinco Reais
      4500000.01 Quatro milhões e Quinhentos mil Reais e Um centavo
      11000548.25 Onze milhões Quinhentos e Quarenta e Oito Reais e Vinte e Cinco centavos

    12345000000.00 Doze bilhões Trezentos e Quarenta e Cinco milhões de Reais

     99999999999.99 Noventa e Nove bilhões Novecentos e Noventa e Nove milhões Novecentos e Noventa e Nove mil Novecentos e Noventa e Nove Reais e Noventa e Nove centavos
      101999999999.99 Fora do limite de -$99,999,999,999.99 até $99,999,999,999.99

     

    Se interessar me diga que te envio o códio e os procedimentos apra inserir no SQL.

    Um Abraço,

    Marcio Abreu

    Você poderia colocar isso aqui neah.

    Get a life. Go party!
    Wednesday, June 24, 2009 6:08 PM
  • Marcio, se ainda for possível eu gostaria de ver esse código.

    lfsmgs@gmail.com

    Obrigado.
    Monday, December 28, 2009 11:57 AM
  • ola  queria saber como ser escrever esse numero 100.000

    Monday, March 19, 2012 10:28 PM
  • quarenta , cinco reas , vinte três centavos
    Wednesday, May 09, 2012 4:08 PM
  • Você pode mandar pra mim ?

    alexandrino.alx@hotmail.com

    Valeu!

    Friday, August 30, 2013 1:04 PM
  • Aqui tem uma excelente  do autor kurtsp:

    fonte:http://forum.imasters.com.br/topic/221084-valor-por-extenso-no-sql/

    CREATE FUNCTION dbo.fn_numero_por_extenso
    (
    @valor DECIMAL(18,2)
    )
    RETURNS VARCHAR(8000)
    AS
    BEGIN
    
    DECLARE @valorCentavos	TINYINT	 --Valor dos Centavos
    DECLARE @valorInt	 BIGINT	 --Remove os centavos
    DECLARE @valorStr	 VARCHAR(20)	 --Valor como string
    DECLARE @pedacoStr1	 VARCHAR(20)	 --Pedaco da str
    DECLARE @pedacoStr2	 VARCHAR(20)	 --Pedaco da str
    DECLARE @pedacoStr3	 VARCHAR(20)	 --Pedaco da str
    DECLARE @pedacoInt1	 INT	 --Pedaco da INT
    DECLARE @pedacoInt2	 INT	 --Pedaco da INT
    DECLARE @pedacoInt3	 INT	 --Pedaco da INT
    DECLARE @menorN	 INT
    DECLARE @retorno VARCHAR(8000)
    
    SET @retorno = ''
    SET @valorInt = Convert(bigint, @valor)
    SET @valorStr = Convert(VARCHAR(20), @valorInt)
    SET @valorCentavos = Convert(int, (@valor - convert(bigint, @valor)) * 100)
    
    
    --Retorna Zero
    IF (@valor = 0)
    BEGIN
    SET @retorno = 'Zero Reaiz'
    RETURN @retorno
    END
    
    DECLARE @numeros TABLE (descricao varchar(50), menor int, maior int)
    DECLARE @milhar TABLE (descricaoUm varchar(50), descricaoPl Varchar(50), menor int, maior int)
    
    INSERT INTO @numeros VALUES('Um', 1, 1)
    INSERT INTO @numeros VALUES('Dois', 2, 2)
    INSERT INTO @numeros VALUES('Três', 3, 3)
    INSERT INTO @numeros VALUES('Quatro', 4, 4)
    INSERT INTO @numeros VALUES('Cinco', 5, 5)
    INSERT INTO @numeros VALUES('Seis', 6, 6)
    INSERT INTO @numeros VALUES('Sete', 7, 7)
    INSERT INTO @numeros VALUES('Oito', 8, 8)
    INSERT INTO @numeros VALUES('Nove', 9, 9)
    INSERT INTO @numeros VALUES('Dez', 10, 10)
    INSERT INTO @numeros VALUES('Onze', 11, 11)
    INSERT INTO @numeros VALUES('Doze', 12, 12)
    INSERT INTO @numeros VALUES('Treze', 13, 13)
    INSERT INTO @numeros VALUES('Catorze', 14, 14)
    INSERT INTO @numeros VALUES('Quinze', 15, 15)
    INSERT INTO @numeros VALUES('Dezesseis', 16, 16)
    INSERT INTO @numeros VALUES('Dezessete', 17, 17)
    INSERT INTO @numeros VALUES('Dezoito', 18, 18)
    INSERT INTO @numeros VALUES('Dezenove', 19, 19)
    INSERT INTO @numeros VALUES('Vinte', 20, 20)
    INSERT INTO @numeros VALUES('Vinte e', 21, 29)
    INSERT INTO @numeros VALUES('Trinta', 30, 30)
    INSERT INTO @numeros VALUES('Trinta e', 31, 39)
    INSERT INTO @numeros VALUES('Quarenta', 40, 40)
    INSERT INTO @numeros VALUES('Quarenta e', 41, 49)
    INSERT INTO @numeros VALUES('Cinquenta', 50, 50)
    INSERT INTO @numeros VALUES('Cinquenta e', 51, 59)
    INSERT INTO @numeros VALUES('Sessenta', 60, 60)
    INSERT INTO @numeros VALUES('Sessenta e', 61, 69)
    INSERT INTO @numeros VALUES('Setenta', 70, 70)
    INSERT INTO @numeros VALUES('Setenta e', 71, 79)
    INSERT INTO @numeros VALUES('Oitenta', 80, 80)
    INSERT INTO @numeros VALUES('Oitenta e', 81, 89)
    INSERT INTO @numeros VALUES('Noventa', 90, 90)
    INSERT INTO @numeros VALUES('Noventa e', 91, 99)
    INSERT INTO @numeros VALUES('Cem', 100, 100)
    INSERT INTO @numeros VALUES('Cento e', 101, 199)
    INSERT INTO @numeros VALUES('Duzentos', 200, 200)
    INSERT INTO @numeros VALUES('Duzentos e', 201, 299)
    INSERT INTO @numeros VALUES('Trezentos', 300, 300)
    INSERT INTO @numeros VALUES('Trezentos e', 301, 399)
    INSERT INTO @numeros VALUES('Quatrocentos', 400, 400)
    INSERT INTO @numeros VALUES('Quatrocentos e', 401, 499)
    INSERT INTO @numeros VALUES('Quinhentos', 500, 500)
    INSERT INTO @numeros VALUES('Quinhentos e', 501, 599)
    INSERT INTO @numeros VALUES('Seiscentos', 600, 600)
    INSERT INTO @numeros VALUES('Seiscentos e', 601, 699)
    INSERT INTO @numeros VALUES('Setecentos', 700, 700)
    INSERT INTO @numeros VALUES('Setecentos e', 701, 799)
    INSERT INTO @numeros VALUES('Oitocentos', 800, 800)
    INSERT INTO @numeros VALUES('Oitocentos e', 801, 899)
    INSERT INTO @numeros VALUES('Novecentos', 900, 900)
    INSERT INTO @numeros VALUES('Novecentos e', 901, 999)
    
    INSERT INTO @milhar VALUES('Mil', 'Mil', 4, 6)
    INSERT INTO @milhar VALUES('Milhão', 'Milhões', 7, 9)
    INSERT INTO @milhar VALUES('Bilhão', 'Bilhões', 10, 12)
    INSERT INTO @milhar VALUES('Trilhão', 'Trilhões', 13, 15)
    INSERT INTO @milhar VALUES('Quadrilhão', 'Quadrilhões', 16, 18)
    
    --Busca o número de casas (sempre em 3)
    SELECT TOP 1 @menorN = menor - 1 FROM @milhar WHERE menor > len(@valorStr)
    
    --Adiciona casas a esquerda (tratando sempre de 3 em 3 casas)
    SET @valorStr = replicate('0', @menorN - len(@valorStr)) + @valorStr
    
    --Varre Convertendo os valores para valores por extenso
    WHILE (len(@valorStr) > 0)
    BEGIN
    --Busca os 3 primeiros carac.
    SET @pedacoStr1 = left(@valorStr, 3)
    SET @pedacoStr2 = right(@pedacoStr1, 2)
    SET @pedacoStr3 = right(@pedacoStr2, 1)
    SET @pedacoInt1 = Convert(int, @pedacoStr1)
    SET @pedacoInt2 = Convert(int, @pedacoStr2)
    SET @pedacoInt3 = Convert(int, @pedacoStr3)
    
    --Busca a centena
    SELECT 
    @retorno = @retorno + descricao + ' ' 
    FROM 
    @numeros 
    WHERE 
    ((len(@pedacoInt1) = 3) AND @pedacoStr1 BETWEEN menor AND maior) 
    OR ((@pedacoInt2 <> 0 AND len(@pedacoInt2) = 2) AND @pedacoInt2 BETWEEN menor AND maior)
    OR ((@pedacoInt3 <> 0 AND(@pedacoInt2 < 10 OR @pedacoInt2 > 20)) AND @pedacoInt3 BETWEEN menor AND maior) --Remove de 11 a 19
    ORDER BY 
    maior DESC
    
    --Define o milhar (se foi escrito algum valor para ele)
    IF (@pedacoInt1 > 0)
    SELECT @retorno = @retorno + CASE WHEN @pedacoInt1 > 1 THEN descricaoPL ELSE descricaoUm END + ' ' FROM @milhar WHERE (len(@valorStr) BETWEEN menor and maior)
    
    --Remove os pedaços efetuados
    SET @valorStr = right(@valorStr, len(@valorStr) - 3)
    
    IF (convert(int, left(@valorStr, 3)) > 0)
    SET @retorno = @retorno + 'e '
    ELSE
    IF (convert(int, @valorStr) = 0 AND len(@valorStr) = 6) /*Somente coloca na dezena*/
    SET @retorno = @retorno + 'de '	
    END
    
    --Somente coloca se tiver algum valor.
    IF (len(@retorno) > 0)
    SET @retorno = @retorno + CASE WHEN @valorInt > 1 THEN 'Reais ' ELSE 'Real ' END
    
    
    --Busca os centavos
    SET @valorStr = Convert(varchar(2), @valorCentavos)
    
    --Adiciona casas a esquerda
    SET @valorStr = replicate('0', 2 - len(@valorStr)) + @valorStr
    
    --Define os centavos
    --Busca os 2 caracteres
    SET @pedacoStr1 = @valorStr
    SET @pedacoStr2 = right(@valorStr, 1)
    SET @pedacoInt1 = Convert(int, @pedacoStr1)
    SET @pedacoInt2 = Convert(int, @pedacoStr2)
    
    --Define a descrição (Não coloca se não tiver reais)
    IF (@pedacoInt1 > 0 AND (len(@retorno) > 0))
    SET @retorno = @retorno + 'e '
    
    --Busca a centena
    SELECT 
    @retorno = @retorno + descricao + ' ' 
    FROM 
    @numeros 
    WHERE 
    ((@pedacoInt1 <> 0 AND len(@pedacoInt1) = 2) AND @pedacoInt1 BETWEEN menor AND maior)
    OR ((@pedacoInt2 <> 0 AND (@pedacoInt1 < 10 OR @pedacoInt1 > 20)) AND @pedacoInt2 BETWEEN menor AND maior)
    ORDER BY 
    maior DESC
    
    --Define a descrição
    IF (@pedacoInt1 > 0)
    SELECT @retorno = @retorno + 'Centavo' + CASE WHEN @pedacoInt1 > 1 THEN 's' ELSE '' END
    
    
    RETURN @retorno
    END
    
    --Para teste:
    SELECT dbo.fn_numero_por_extenso(282000.01) 

    testei e funciona muito bem.

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    Friday, August 30, 2013 1:11 PM