none
VALOR POR EXTENSO

    Question

  • Pessoal,

     

    Estou precisando de uma classe .NET que faça conversão de valor em double para extenso...

     

    Será que alguém pode me ajudar?

     

    Obrigado,

    Wednesday, May 16, 2007 4:44 PM

Answers

  • Pessoal,

     

    Acabou que eu não achei essa rotina em lugar algum. Consegui uma Funciotion em SQL.

     

    Se alguém tiver interesse, o código está logo abaixo:

     

    CREATE FUNCTION dbo.GrupoExtenso(@VALOR DECIMAL(18, 2))
    RETURNS VARCHAR(255)
    AS
    BEGIN
    DECLARE
    @STR_EXT VARCHAR(255),
    @AUX INT,
    @VALOR_T INT

    SET @STR_EXT = ''
    SET @AUX = 0

    SET @VALOR_T = ROUND(@VALOR, 0)
    SET @AUX = @VALOR_T - (@VALOR_T % 100)


    IF (@VALOR_T = 100) SET @STR_EXT = ' Cem'
    ELSE IF (@AUX = 100) SET @STR_EXT = ' Cento'
    ELSE IF (@AUX = 200) SET @STR_EXT = ' Duzentos'
    ELSE IF (@AUX = 300) SET @STR_EXT = ' Trezentos'
    ELSE IF (@AUX = 400) SET @STR_EXT = ' Quatrocentos'
    ELSE IF (@AUX = 500) SET @STR_EXT = ' Quinhentos'
    ELSE IF (@AUX = 600) SET @STR_EXT = ' Seiscentos'
    ELSE IF (@AUX = 700) SET @STR_EXT = ' Setecentos'
    ELSE IF (@AUX = 800) SET @STR_EXT = ' Oitocentos'
    ELSE IF (@AUX = 900) SET @STR_EXT = ' Novecentos'

    IF (((@VALOR_T - @AUX) <> 0) AND (@AUX <> 0))
    SET @STR_EXT = @STR_EXT+' e'

    SET @AUX = (@VALOR_T % 100) - (@VALOR_T % 10)


    IF ((@AUX = 0) and (@VALOR_T < 10))
    BEGIN
    SET @AUX = (@VALOR_T % 10)

    IF (@AUX = 1) SET @STR_EXT = @STR_EXT+' Um'
    ELSE IF (@AUX = 2) SET @STR_EXT = @STR_EXT+' Dois'
    ELSE IF (@AUX = 3) SET @STR_EXT = @STR_EXT+' Tres'
    ELSE IF (@AUX = 4) SET @STR_EXT = @STR_EXT+' Quatro'
    ELSE IF (@AUX = 5) SET @STR_EXT = @STR_EXT+' Cinco'
    ELSE IF (@AUX = 6) SET @STR_EXT = @STR_EXT+' Seis'
    ELSE IF (@AUX = 7) SET @STR_EXT = @STR_EXT+' Sete'
    ELSE IF (@AUX = 8) SET @STR_EXT = @STR_EXT+' Oito'
    ELSE IF (@AUX = 9) SET @STR_EXT = @STR_EXT+' Nove'
    END


    SET @AUX = (@VALOR_T % 100) - (@VALOR_T % 10)

    IF (@AUX = 10)
    BEGIN
    SET @AUX = (@VALOR_T % 10)

    IF (@AUX = 0) SET @STR_EXT = @STR_EXT+' Dez'
    ELSE IF (@AUX = 1) SET @STR_EXT = @STR_EXT+' Onze'
    ELSE IF (@AUX = 2) SET @STR_EXT = @STR_EXT+' Doze'
    ELSE IF (@AUX = 3) SET @STR_EXT = @STR_EXT+' Treze'
    ELSE IF (@AUX = 4) SET @STR_EXT = @STR_EXT+' Quatorze'
    ELSE IF (@AUX = 5) SET @STR_EXT = @STR_EXT+' Quinze'
    ELSE IF (@AUX = 6) SET @STR_EXT = @STR_EXT+' Dezesseis'
    ELSE IF (@AUX = 7) SET @STR_EXT = @STR_EXT+' Dezessete'
    ELSE IF (@AUX = 8) SET @STR_EXT = @STR_EXT+' Dezoito'
    ELSE IF (@AUX = 9) SET @STR_EXT = @STR_EXT+' Dezenove'
    END
    ELSE
    BEGIN
    IF (@AUX = 20) SET @STR_EXT = @STR_EXT+' Vinte'
    ELSE IF (@AUX = 30) SET @STR_EXT = @STR_EXT+' Trinta'
    ELSE IF (@AUX = 40) SET @STR_EXT = @STR_EXT+' Quarenta'
    ELSE IF (@AUX = 50) SET @STR_EXT = @STR_EXT+' Cinquenta'
    ELSE IF (@AUX = 60) SET @STR_EXT = @STR_EXT+' Sessenta'
    ELSE IF (@AUX = 70) SET @STR_EXT = @STR_EXT+' Setenta'
    ELSE IF (@AUX = 80) SET @STR_EXT = @STR_EXT+' Oitenta'
    ELSE IF (@AUX = 90) SET @STR_EXT = @STR_EXT+' Noventa'

    IF ((@AUX <> 0) and ((@VALOR_T % 10) <> 0))
    BEGIN
    SET @STR_EXT = @STR_EXT+' e'

    SET @AUX = (@VALOR_T % 10)

    IF (@AUX = 1) SET @STR_EXT = @STR_EXT+' Um'
    ELSE IF (@AUX = 2) SET @STR_EXT = @STR_EXT+' Dois'
    ELSE IF (@AUX = 3) SET @STR_EXT = @STR_EXT+' Tres'
    ELSE IF (@AUX = 4) SET @STR_EXT = @STR_EXT+' Quatro'
    ELSE IF (@AUX = 5) SET @STR_EXT = @STR_EXT+' Cinco'
    ELSE IF (@AUX = 6) SET @STR_EXT = @STR_EXT+' Seis'
    ELSE IF (@AUX = 7) SET @STR_EXT = @STR_EXT+' Sete'
    ELSE IF (@AUX = 8) SET @STR_EXT = @STR_EXT+' Oito'
    ELSE IF (@AUX = 9) SET @STR_EXT = @STR_EXT+' Nove'
    END
    END

    RETURN(@STR_EXT);
    END

    GO

     

    CREATE FUNCTION dbo.TrataGrupoExtenso(
    @GRUPO DECIMAL(18, 5), @SINGULAR VARCHAR(50),
    @PLURAL VARCHAR(50), @FLAG_E INT, @STR_EXT VARCHAR(255))
    RETURNS @RESULTADO TABLE (FLAG_E INT, STR_EXT varchar(250))
    AS
    BEGIN
    DECLARE
    @RETORNO VARCHAR(255),
    @FLAG INT

    SET @RETORNO = @STR_EXT
    SET @FLAG = @FLAG_E

    IF (@GRUPO <> 0)
    BEGIN
    IF (@FLAG_E = 1) SET @RETORNO = @RETORNO + ' e'
    SET @FLAG_E = 1
    SET @RETORNO = @RETORNO + (SELECT dbo.GrupoExtenso(@grupo))
    IF (@GRUPO = 1) SET @RETORNO = @RETORNO + @SINGULAR
    ELSE SET @RETORNO = @RETORNO + @PLURAL
    END
    INSERT @RESULTADO
    (FLAG_E, STR_EXT) VALUES (@FLAG, @RETORNO)
    RETURN
    END

    GO

     


    ALTER FUNCTION dbo.Extenso(@VALOR DECIMAL(18, 5))
    RETURNS VARCHAR(255)
    AS
    BEGIN

    DECLARE
    @STR_EXT VARCHAR(255),
    @FLAG_E INT,
    @GRUPO DECIMAL(10, 2),
    @MOEDA VARCHAR(10),
    @MOEDA_PLURAL VARCHAR(10),
    @FLAG_CENTAVOS DECIMAL(18, 5)

    -- Aqui vc podera configurar a descricao da Moeda
    SET @MOEDA = 'Real'
    SET @MOEDA_PLURAL = 'Reais'
    SET @FLAG_CENTAVOS = 1 -- Exibir os centavos [ 0) Nao 1) Sim ]

    SET @STR_EXT = ''
    SET @FLAG_E = 0
    SET @GRUPO = 0

    IF ((CONVERT(INT, @VALOR) - (CONVERT(INT, @VALOR) % 1)) = 0)
    BEGIN
    SET @STR_EXT = ' Zero'
    END
    ELSE
    BEGIN
    DECLARE @TEMPINT BIGINT
    -- SET @TEMPINT = (.000000001*((CONVERT(BIGINT, @VALOR) % 1000000000000)
    -- - (CONVERT(BIGINT, @VALOR) % 1000000000)))
    -- SELECT @FLAG_E = FLAG_E, @STR_EXT = STR_EXT FROM dbo.TrataGrupoExtenso(
    -- @TEMPINT, ' Bilhão', ' Bilhões', @FLAG_E, @STR_EXT)

    SET @TEMPINT = .000001*((CONVERT(INT, @VALOR) % 1000000000)
    - (CONVERT(INT, @VALOR) % 1000000))

    SELECT @FLAG_E = FLAG_E, @STR_EXT = STR_EXT
    FROM dbo.TrataGrupoExtenso(
    @TEMPINT, ' Milhão' , ' Milhões', @FLAG_E, @STR_EXT)

    SET @TEMPINT = .001*((CONVERT(INT, @VALOR) % 1000000) -
    (CONVERT(INT, @VALOR) % 1000))

    SELECT @FLAG_E = FLAG_E, @STR_EXT = STR_EXT
    FROM dbo.TrataGrupoExtenso(
    @TEMPINT, ' Mil' , ' Mil', @FLAG_E, @STR_EXT)

    SET @TEMPINT = (CONVERT(INT, @VALOR) % 1000)

    SELECT @FLAG_E = FLAG_E, @STR_EXT = STR_EXT
    FROM dbo.TrataGrupoExtenso(
    @TEMPINT, '' , '', @FLAG_E, @STR_EXT)
    END

    IF (ROUND(@VALOR, 0) = 1)
    BEGIN
    SET @STR_EXT = @STR_EXT + ' '+RTRIM(@MOEDA)
    END
    ELSE
    BEGIN
    IF (ROUND(@VALOR, -6) <> 0) and
    (ROUND(@VALOR, 0) - ROUND(@VALOR, -6) = 0)
    SET @STR_EXT = @STR_EXT + ' de ' + RTRIM(@moeda_plural)
    ELSE
    SET @STR_EXT = @STR_EXT + ' ' + RTRIM(@moeda_plural)
    END

    IF (@FLAG_CENTAVOS = 1)
    BEGIN
    SET @FLAG_E = 1;

    DECLARE @TEMPINT2 BIGINT
    -- SET @TEMPINT2 = 100*(@VALOR - ROUND(@VALOR, 0))

    set @TEMPINT2 = cast(right(cast(cast(@VALOR as numeric(10,2)) as varchar(15)),2) as BIGINT)

    -- Aqui vc podera mudar a descricao dos centavos
    SELECT @FLAG_E = FLAG_E, @STR_EXT = STR_EXT
    FROM dbo.TrataGrupoExtenso(
    @TEMPINT2, ' Centavo' , ' Centavos', @FLAG_E, @STR_EXT)
    END

    RETURN(@STR_EXT)
    END

    GO

     

     

    Para chamar essa Funciotion, o código é esse:

    SELECT dbo.Extenso(VALOR DESEJADO)

     

    EXEMPLO:

    SELECT dbo.Extenso(2541.37)

    RETORNA: Dois Mil Quinhentos e Quarenta e Um Reais e Trinta e Sete Centavos

     

     

    Um abraço.

    Thursday, May 17, 2007 12:30 PM

All replies

  • Pessoal,

     

    Acabou que eu não achei essa rotina em lugar algum. Consegui uma Funciotion em SQL.

     

    Se alguém tiver interesse, o código está logo abaixo:

     

    CREATE FUNCTION dbo.GrupoExtenso(@VALOR DECIMAL(18, 2))
    RETURNS VARCHAR(255)
    AS
    BEGIN
    DECLARE
    @STR_EXT VARCHAR(255),
    @AUX INT,
    @VALOR_T INT

    SET @STR_EXT = ''
    SET @AUX = 0

    SET @VALOR_T = ROUND(@VALOR, 0)
    SET @AUX = @VALOR_T - (@VALOR_T % 100)


    IF (@VALOR_T = 100) SET @STR_EXT = ' Cem'
    ELSE IF (@AUX = 100) SET @STR_EXT = ' Cento'
    ELSE IF (@AUX = 200) SET @STR_EXT = ' Duzentos'
    ELSE IF (@AUX = 300) SET @STR_EXT = ' Trezentos'
    ELSE IF (@AUX = 400) SET @STR_EXT = ' Quatrocentos'
    ELSE IF (@AUX = 500) SET @STR_EXT = ' Quinhentos'
    ELSE IF (@AUX = 600) SET @STR_EXT = ' Seiscentos'
    ELSE IF (@AUX = 700) SET @STR_EXT = ' Setecentos'
    ELSE IF (@AUX = 800) SET @STR_EXT = ' Oitocentos'
    ELSE IF (@AUX = 900) SET @STR_EXT = ' Novecentos'

    IF (((@VALOR_T - @AUX) <> 0) AND (@AUX <> 0))
    SET @STR_EXT = @STR_EXT+' e'

    SET @AUX = (@VALOR_T % 100) - (@VALOR_T % 10)


    IF ((@AUX = 0) and (@VALOR_T < 10))
    BEGIN
    SET @AUX = (@VALOR_T % 10)

    IF (@AUX = 1) SET @STR_EXT = @STR_EXT+' Um'
    ELSE IF (@AUX = 2) SET @STR_EXT = @STR_EXT+' Dois'
    ELSE IF (@AUX = 3) SET @STR_EXT = @STR_EXT+' Tres'
    ELSE IF (@AUX = 4) SET @STR_EXT = @STR_EXT+' Quatro'
    ELSE IF (@AUX = 5) SET @STR_EXT = @STR_EXT+' Cinco'
    ELSE IF (@AUX = 6) SET @STR_EXT = @STR_EXT+' Seis'
    ELSE IF (@AUX = 7) SET @STR_EXT = @STR_EXT+' Sete'
    ELSE IF (@AUX = 8) SET @STR_EXT = @STR_EXT+' Oito'
    ELSE IF (@AUX = 9) SET @STR_EXT = @STR_EXT+' Nove'
    END


    SET @AUX = (@VALOR_T % 100) - (@VALOR_T % 10)

    IF (@AUX = 10)
    BEGIN
    SET @AUX = (@VALOR_T % 10)

    IF (@AUX = 0) SET @STR_EXT = @STR_EXT+' Dez'
    ELSE IF (@AUX = 1) SET @STR_EXT = @STR_EXT+' Onze'
    ELSE IF (@AUX = 2) SET @STR_EXT = @STR_EXT+' Doze'
    ELSE IF (@AUX = 3) SET @STR_EXT = @STR_EXT+' Treze'
    ELSE IF (@AUX = 4) SET @STR_EXT = @STR_EXT+' Quatorze'
    ELSE IF (@AUX = 5) SET @STR_EXT = @STR_EXT+' Quinze'
    ELSE IF (@AUX = 6) SET @STR_EXT = @STR_EXT+' Dezesseis'
    ELSE IF (@AUX = 7) SET @STR_EXT = @STR_EXT+' Dezessete'
    ELSE IF (@AUX = 8) SET @STR_EXT = @STR_EXT+' Dezoito'
    ELSE IF (@AUX = 9) SET @STR_EXT = @STR_EXT+' Dezenove'
    END
    ELSE
    BEGIN
    IF (@AUX = 20) SET @STR_EXT = @STR_EXT+' Vinte'
    ELSE IF (@AUX = 30) SET @STR_EXT = @STR_EXT+' Trinta'
    ELSE IF (@AUX = 40) SET @STR_EXT = @STR_EXT+' Quarenta'
    ELSE IF (@AUX = 50) SET @STR_EXT = @STR_EXT+' Cinquenta'
    ELSE IF (@AUX = 60) SET @STR_EXT = @STR_EXT+' Sessenta'
    ELSE IF (@AUX = 70) SET @STR_EXT = @STR_EXT+' Setenta'
    ELSE IF (@AUX = 80) SET @STR_EXT = @STR_EXT+' Oitenta'
    ELSE IF (@AUX = 90) SET @STR_EXT = @STR_EXT+' Noventa'

    IF ((@AUX <> 0) and ((@VALOR_T % 10) <> 0))
    BEGIN
    SET @STR_EXT = @STR_EXT+' e'

    SET @AUX = (@VALOR_T % 10)

    IF (@AUX = 1) SET @STR_EXT = @STR_EXT+' Um'
    ELSE IF (@AUX = 2) SET @STR_EXT = @STR_EXT+' Dois'
    ELSE IF (@AUX = 3) SET @STR_EXT = @STR_EXT+' Tres'
    ELSE IF (@AUX = 4) SET @STR_EXT = @STR_EXT+' Quatro'
    ELSE IF (@AUX = 5) SET @STR_EXT = @STR_EXT+' Cinco'
    ELSE IF (@AUX = 6) SET @STR_EXT = @STR_EXT+' Seis'
    ELSE IF (@AUX = 7) SET @STR_EXT = @STR_EXT+' Sete'
    ELSE IF (@AUX = 8) SET @STR_EXT = @STR_EXT+' Oito'
    ELSE IF (@AUX = 9) SET @STR_EXT = @STR_EXT+' Nove'
    END
    END

    RETURN(@STR_EXT);
    END

    GO

     

    CREATE FUNCTION dbo.TrataGrupoExtenso(
    @GRUPO DECIMAL(18, 5), @SINGULAR VARCHAR(50),
    @PLURAL VARCHAR(50), @FLAG_E INT, @STR_EXT VARCHAR(255))
    RETURNS @RESULTADO TABLE (FLAG_E INT, STR_EXT varchar(250))
    AS
    BEGIN
    DECLARE
    @RETORNO VARCHAR(255),
    @FLAG INT

    SET @RETORNO = @STR_EXT
    SET @FLAG = @FLAG_E

    IF (@GRUPO <> 0)
    BEGIN
    IF (@FLAG_E = 1) SET @RETORNO = @RETORNO + ' e'
    SET @FLAG_E = 1
    SET @RETORNO = @RETORNO + (SELECT dbo.GrupoExtenso(@grupo))
    IF (@GRUPO = 1) SET @RETORNO = @RETORNO + @SINGULAR
    ELSE SET @RETORNO = @RETORNO + @PLURAL
    END
    INSERT @RESULTADO
    (FLAG_E, STR_EXT) VALUES (@FLAG, @RETORNO)
    RETURN
    END

    GO

     


    ALTER FUNCTION dbo.Extenso(@VALOR DECIMAL(18, 5))
    RETURNS VARCHAR(255)
    AS
    BEGIN

    DECLARE
    @STR_EXT VARCHAR(255),
    @FLAG_E INT,
    @GRUPO DECIMAL(10, 2),
    @MOEDA VARCHAR(10),
    @MOEDA_PLURAL VARCHAR(10),
    @FLAG_CENTAVOS DECIMAL(18, 5)

    -- Aqui vc podera configurar a descricao da Moeda
    SET @MOEDA = 'Real'
    SET @MOEDA_PLURAL = 'Reais'
    SET @FLAG_CENTAVOS = 1 -- Exibir os centavos [ 0) Nao 1) Sim ]

    SET @STR_EXT = ''
    SET @FLAG_E = 0
    SET @GRUPO = 0

    IF ((CONVERT(INT, @VALOR) - (CONVERT(INT, @VALOR) % 1)) = 0)
    BEGIN
    SET @STR_EXT = ' Zero'
    END
    ELSE
    BEGIN
    DECLARE @TEMPINT BIGINT
    -- SET @TEMPINT = (.000000001*((CONVERT(BIGINT, @VALOR) % 1000000000000)
    -- - (CONVERT(BIGINT, @VALOR) % 1000000000)))
    -- SELECT @FLAG_E = FLAG_E, @STR_EXT = STR_EXT FROM dbo.TrataGrupoExtenso(
    -- @TEMPINT, ' Bilhão', ' Bilhões', @FLAG_E, @STR_EXT)

    SET @TEMPINT = .000001*((CONVERT(INT, @VALOR) % 1000000000)
    - (CONVERT(INT, @VALOR) % 1000000))

    SELECT @FLAG_E = FLAG_E, @STR_EXT = STR_EXT
    FROM dbo.TrataGrupoExtenso(
    @TEMPINT, ' Milhão' , ' Milhões', @FLAG_E, @STR_EXT)

    SET @TEMPINT = .001*((CONVERT(INT, @VALOR) % 1000000) -
    (CONVERT(INT, @VALOR) % 1000))

    SELECT @FLAG_E = FLAG_E, @STR_EXT = STR_EXT
    FROM dbo.TrataGrupoExtenso(
    @TEMPINT, ' Mil' , ' Mil', @FLAG_E, @STR_EXT)

    SET @TEMPINT = (CONVERT(INT, @VALOR) % 1000)

    SELECT @FLAG_E = FLAG_E, @STR_EXT = STR_EXT
    FROM dbo.TrataGrupoExtenso(
    @TEMPINT, '' , '', @FLAG_E, @STR_EXT)
    END

    IF (ROUND(@VALOR, 0) = 1)
    BEGIN
    SET @STR_EXT = @STR_EXT + ' '+RTRIM(@MOEDA)
    END
    ELSE
    BEGIN
    IF (ROUND(@VALOR, -6) <> 0) and
    (ROUND(@VALOR, 0) - ROUND(@VALOR, -6) = 0)
    SET @STR_EXT = @STR_EXT + ' de ' + RTRIM(@moeda_plural)
    ELSE
    SET @STR_EXT = @STR_EXT + ' ' + RTRIM(@moeda_plural)
    END

    IF (@FLAG_CENTAVOS = 1)
    BEGIN
    SET @FLAG_E = 1;

    DECLARE @TEMPINT2 BIGINT
    -- SET @TEMPINT2 = 100*(@VALOR - ROUND(@VALOR, 0))

    set @TEMPINT2 = cast(right(cast(cast(@VALOR as numeric(10,2)) as varchar(15)),2) as BIGINT)

    -- Aqui vc podera mudar a descricao dos centavos
    SELECT @FLAG_E = FLAG_E, @STR_EXT = STR_EXT
    FROM dbo.TrataGrupoExtenso(
    @TEMPINT2, ' Centavo' , ' Centavos', @FLAG_E, @STR_EXT)
    END

    RETURN(@STR_EXT)
    END

    GO

     

     

    Para chamar essa Funciotion, o código é esse:

    SELECT dbo.Extenso(VALOR DESEJADO)

     

    EXEMPLO:

    SELECT dbo.Extenso(2541.37)

    RETORNA: Dois Mil Quinhentos e Quarenta e Um Reais e Trinta e Sete Centavos

     

     

    Um abraço.

    Thursday, May 17, 2007 12:30 PM
  • Encontrei esses aqui... se ainda for útil..

    Re: Number to Word - Portuguese Brazil
    Author: Rafael Leal (---.mp.sc.gov.br)
    Date:   08-21-06 15:29

    I developed 2 classes, but in Brazilian Portuguese.

    Thanks for the help.

    Here are the classes:

    InteiroPorExtenso.cs
    ValorPorExtenso.cs


    InteiroPorExtenso.cs
    --------------------------
    using System;
    using System.Data;
    using System.Configuration;
    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 System.Collections.Generic;

    /// <summary>
    /// Recebe um inteiro longo sem sinal (ulong) e retorna este número por extenso através do método ToString().
    /// VALOR_MAX = 999.999.999.999.999
    /// Por default, Ligação = "E", todas as letras MAIÚSCULAS.
    /// Ex. 123 -> CENTO E VINTE E TRÊS.
    /// </summary>
    public class InteiroPorExtenso
    {
    private ulong valor;
    private string ligacao;
    private string[] aUnid = {
    string.Empty, // 0
    "UM", // 1
    "DOIS", // 2
    "TRÊS", // 3
    "QUATRO", // 4
    "CINCO", // 5
    "SEIS", // 6
    "SETE", // 7
    "OITO", // 8
    "NOVE" // 9
    };

    private string[,] rotuloDoGrupo = {
    { string.Empty, string.Empty },
    { "MIL", "MIL" },
    { "MILHÃO", "MILHÕES" },
    { "BILHÃO", "BILHÕES" },
    { "TRILHÃO", "TRILHÕES" }
    };
    private const ulong VALOR_MAX = 999999999999999;
    private int CASAS_MAX = VALOR_MAX.ToString().Length;



    public InteiroPorExtenso(ulong valor)
    {
    Ligacao = "E";
    this.valor = valor;
    }

    /// <summary>
    /// Rótulo da ligação, por default é "E". Usado no valor por extenso, por
    /// ex. "UM MIL E CEM REAIS".
    /// </summary>
    public string Ligacao {
    get { return ligacao; }
    set { ligacao = value; }
    }

    private string GetUnidade( int unidade ) {
    return aUnid[unidade];
    }
    // Vintena = numero entre 10 e 20.
    private string GetVintena( int vintena ) {
    string[] aUnid = new string[20];
    aUnid[0] = string.Empty;
    aUnid[11] = "ONZE";
    aUnid[12] = "DOZE";
    aUnid[13] = "TREZE";
    aUnid[14] = "QUATORZE";
    aUnid[15] = "QUINZE";
    aUnid[16] = "DEZESSEIS";
    aUnid[17] = "DEZESETE";
    aUnid[18] = "DEZOITO";
    aUnid[19] = "DEZENOVE";

    return aUnid[vintena];
    }
    private string GetDezena( int dezena ) {
    string[] aDezena = new string[10];
    aDezena[0] = "";
    aDezena[1] = "DEZ";
    aDezena[2] = "VINTE";
    aDezena[3] = "TRINTA";
    aDezena[4] = "QUARENTA";
    aDezena[5] = "CINQÜENTA";
    aDezenaDevil = "SESSENTA";
    aDezena[7] = "SETENTA";
    aDezenaMusic = "OITENTA";
    aDezena[9] = "NOVENTA";

    return aDezena[dezena];
    }
    private string GetCem() {
    return "CEM";
    }
    private string GetCentena( int centena ) {
    string[] aCentena = new string[10];
    aCentena[0] = "";
    aCentena[1] = "CENTO"; // Para CEM, ver método GetCem()
    aCentena[2] = "DUZENTOS";
    aCentena[3] = "TREZENTOS";
    aCentena[4] = "QUATROCENTOS";
    aCentena[5] = "QUINHENTOS";
    aCentenaDevil = "SEISCENTOS";
    aCentena[7] = "SETECENTOS";
    aCentenaMusic = "OITOCENTOS";
    aCentena[9] = "NOVECENTOS";

    return aCentena[centena];
    }
    private string GetDezenaEUnidade( int dezena, int unidade, string ligacao ) {

    if (unidade == 0) {
    return GetDezena( dezena );

    } else if (dezena == 0) {
    return GetUnidade( unidade );
    } else if (dezena == 1) {
    int vintena = 10 + unidade; // Vintena = numero entre 10 e 20.
    return GetVintena( vintena );
    } else {
    return GetDezena( dezena ) + " " + ligacao + " " + GetUnidade( unidade );
    }
    }
    private string GetCentenaDezenaUnidade( int centena, int dezena, int unidade, string ligacao ) {

    if (unidade == 0 && dezena == 0 && centena == 1) {
    return ligacao + " " + GetCem();
    } else if (unidade == 0 && dezena == 0 && centena != 1) {
    return ligacao + " " + GetCentena( centena );
    } else if (centena == 0) {
    return ligacao + " " + GetDezenaEUnidade( dezena, unidade, ligacao );
    } else {
    return GetCentena( centena ) + " " + ligacao + " " + GetDezenaEUnidade( dezena, unidade, ligacao );
    }
    }
    private string GetGrupo(
    int centena,
    int dezena,
    int unidade,
    string rotuloDoGrupoSingular,
    string rotuloDoGrupoPlural ) {

    if (centena == 0 && dezena == 0 && unidade == 0) {
    return string.Empty;
    } else
    if (rotuloDoGrupoSingular == string.Empty && rotuloDoGrupoPlural == string.Empty) {
    // tratamento para o caso das unidades
    return GetCentenaDezenaUnidade( centena, dezena, unidade, ligacao );
    } else if (centena == 0 && dezena == 0 && unidade == 1) {
    return GetCentenaDezenaUnidade( centena, dezena, unidade, ligacao ) + " " + rotuloDoGrupoSingular;
    } else {
    return GetCentenaDezenaUnidade( centena, dezena, unidade, ligacao ) + " " + rotuloDoGrupoPlural;
    }
    }
    private string PorExtenso( ulong numero ) {

    int casas = numero.ToString().Length;

    int[] grupo = new int[CASAS_MAX + 1]; // +1 porque nao será utilizada a posição 0
    for (int i = 0; i < CASAS_MAX; i++) {
    grupo = 0;
    }

    if (numero > VALOR_MAX) {
    throw new ArgumentOutOfRangeException( "numero", "valor acima de " + VALOR_MAX.ToString() );
    }

    // Pega unidade (grupo[1]), dezena (grupo[2]), centena (grupo[3]), milhar, etc...
    for (int i = 1; i <= casas; i++) {
    grupo = int.Parse( numero.ToString().Substring( numero.ToString().Length - i, 1 ) );
    }

    LinkedList<string> grupos = new LinkedList<string>();

    for (int i = 1; i <= casas; i = i + 3) {
    grupos.AddFirst(
    GetGrupo(grupo[i + 2],
    grupo[i + 1],
    grupo,
    rotuloDoGrupo[((i - 1) / 3), 0], // rótulo no singular, ex: BILHÃO
    rotuloDoGrupo[((i - 1) / 3), 1] ) // rótulo no plural, ex. BILHÕES
    );
    }

    string numeroExtenso = string.Empty;
    foreach (string strGrupo in grupos) {
    if (strGrupo != string.Empty) {
    if (numeroExtenso != string.Empty) {
    numeroExtenso = numeroExtenso + " " + strGrupo;
    } else {
    numeroExtenso = strGrupo;
    }
    }
    }

    // Todos os grupos recebem o "E" antes, e aqui é retirado o do primeiro grupo.
    if (numeroExtenso.StartsWith( ligacao + " " )) {
    string atualLigacao = ligacao + " ";
    numeroExtenso = numeroExtenso.Substring( atualLigacao.Length);
    }

    if (numeroExtenso.StartsWith( aUnid[1] + " " + rotuloDoGrupo[1, 0] + " ")) { // O último " " é necessário para não confundir com "UM MILlhão".
    string um = aUnid[1] + " "; // umMil = "UM ";
    numeroExtenso = numeroExtenso.Substring( um.Length );
    }


    return numeroExtenso;
    }

    /// <summary>
    /// Recebe um ulong e retorna o valor por extenso destes. Ex: 123
    /// Retorna: CENTO E VINTE E TRÊS.
    /// </summary>
    /// <returns></returns>
    public string ToString() {
    return PorExtenso( valor );
    }

    }
    --------------------------



    ValorPorExtenso.cs
    ____________________
    using System;
    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;


    /// <summary>
    /// Recebe um valor (moeda) e através do método ToString() retorna o valor
    /// por extenso. A moeda default é o Real.
    /// </summary>
    public class ValorPorExtenso {
    private double valor;
    private string rotuloCentavo;
    private string rotuloCentavoPlural;
    private string rotuloMoeda;
    private string rotuloMoedaPlural;
    private string ligacao;
    private string ligacaoMiBiTri;


    /// <summary>
    /// Construtor padrão, por default
    /// RotuloCentavo = "CENTAVO";
    /// RotuloCentavoPlural = "CENTAVOS";
    /// RotuloMoeda = "REAL";
    /// RotuloMoedaPlural = "REAIS";
    /// Ligacao = "E";
    /// </summary>
    /// <param name="valor">Valor a ser ser passado escrito por
    /// extenso no método ToString()</param>
    public ValorPorExtenso( double valor ) {
    this.valor = valor;
    RotuloCentavo = "CENTAVO";
    RotuloCentavoPlural = "CENTAVOS";
    RotuloMoeda = "REAL";
    RotuloMoedaPlural = "REAIS";
    Ligacao = "E";
    LigacaoMiBiTri = "DE";
    }


    /// <summary>
    /// Recebe o rótulo dos centavos, por default é "CENTAVO"
    /// </summary>
    public string RotuloCentavo {
    get { return rotuloCentavo; }
    set { rotuloCentavo = value; }
    }

    /// <summary>
    /// Recebe o rótulo dos centavos no plural, por default é "CENTAVOS"
    /// </summary>
    public string RotuloCentavoPlural {
    get { return rotuloCentavoPlural; }
    set { rotuloCentavoPlural = value; }
    }

    /// <summary>
    /// Recebe o rótulo da moeda, por default é "REAL"
    /// </summary>
    public string RotuloMoeda {
    get { return rotuloMoeda; }
    set { rotuloMoeda = value; }
    }

    /// <summary>
    /// Recebe o rótulo da moeda no plural, por default é "REAIS"
    /// </summary>
    public string RotuloMoedaPlural {
    get { return rotuloMoedaPlural; }
    set { rotuloMoedaPlural = value; }
    }

    /// <summary>
    /// Rótulo da ligação, por default é "E". Usado no valor por extenso, por
    /// ex. "UM MIL E CEM REAIS".
    /// </summary>
    public string Ligacao {
    get { return ligacao; }
    set { ligacao = value; }
    }

    /// <summary>
    /// Rótulo da ligação entre milhão, bilhão e trilhão e reais, por default é "DE".
    /// Usado no valor por extenso, por
    /// ex. "UM MILHÃO DE REAIS".
    /// </summary>
    public string LigacaoMiBiTri {
    get { return ligacaoMiBiTri; }
    set { ligacaoMiBiTri = value; }
    }




    private ulong GetCentavos( double numero ) {
    string numeroStr = String.Format( "{0:c}", numero ).Substring( 3 );
    string centavos = numeroStr.Substring( numeroStr.IndexOf( "," ) + 1 );
    ulong centavosInt = ulong.Parse( centavos );
    return centavosInt;
    }
    private ulong GetParteInteira( double numero ) {
    ulong parteInteira = (ulong)Math.Floor( numero );
    return parteInteira;
    }
    private string GetStrCentavos( ulong centavos ) {
    if (centavos == 0) {
    return string.Empty;
    } else if (centavos == 1) {
    return PorExtenso( centavos ) + " " + RotuloCentavo;
    } else {
    return PorExtenso( centavos ) + " " + RotuloCentavoPlural;
    }
    }
    /// <summary>
    /// Verifica se o número possui o milhão fechado, ou seja, se os números
    /// após o milhão são iguais a zero.
    /// Ex. 1000000 true
    /// 1000001 false
    /// 1234345000000 true
    /// </summary>
    /// <param name="parteInteira"></param>
    /// <returns>true se o número possui os últimos 6 dígitos iguais a zero</returns>
    private bool MilhaoFechado(ulong parteInteira){
    string numero = parteInteira.ToString();
    string ultimosSeisDigitos = numero.Substring( numero.Length - 6 );
    ulong numeroUltimosSeisDigitos = ulong.Parse( ultimosSeisDigitos );
    if (numeroUltimosSeisDigitos > 0) {
    return false;
    } else {
    return true;
    }
    }
    private string GetStrParteInteira( ulong parteInteira ) {

    if (parteInteira == 0) {
    return string.Empty;
    }

    else if (parteInteira == 1) {
    return PorExtenso( parteInteira ) + " " + RotuloMoeda;
    }

    else if ( MilhaoFechado(parteInteira) ){ // Um trilhão DE reais

    return PorExtenso( parteInteira ) + " " + LigacaoMiBiTri + " " + RotuloMoedaPlural;

    }

    else {
    return PorExtenso( parteInteira ) + " " + RotuloMoedaPlural;
    }
    }
    private string GetValorPorExtenso( double valor ) {

    string valorPorExtenso = string.Empty;

    string centavos = GetStrCentavos( GetCentavos( valor ) );
    string reais = GetStrParteInteira( GetParteInteira( valor ) );

    if (centavos != string.Empty && reais != string.Empty) {
    valorPorExtenso = reais + " " + Ligacao + " " + centavos;
    }

    else if (centavos == string.Empty && reais != string.Empty) {
    valorPorExtenso = reais;
    }

    else if (centavos != string.Empty && reais == string.Empty) {
    valorPorExtenso = centavos;
    }
    return valorPorExtenso;
    }


    private string PorExtenso( ulong valor ) {
    InteiroPorExtenso meuInteiro = new InteiroPorExtenso( valor );
    return meuInteiro.ToString();
    }

    /// <summary>
    /// Recebe um double e retorna o valor por extenso destes. Ex: 123,12
    /// Retorna: CENTO E VINTE E TRÊS REAIS E DOZE CENTAVOS.
    /// </summary>
    /// <returns></returns>
    public string ToString() {
    return GetValorPorExtenso( valor );
    }
    }

    ____________________


    Tuesday, April 01, 2008 1:00 PM
  • ===============================================================================
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Collections;

    public class ClsExtenso
    {
        /// <summary>
        /// Função para escrever por extenso os valores em Real (em C# - suporta até R$ 9.999.999.999,99)    
        /// Rotina Criada para ler um número e transformá-lo em extenso                                      
        /// Limite máximo de 9 Bilhões (9.999.999.999,99).
        /// Não aceita números negativos.
        /// LinhadeCodigo.com.br Autor: José F. Mar / Milton P. Jr
        /// Corrigido por Adriano Santos - 2007
        /// </summary>
        /// <param name="pdbl_Valor">Valor para converter em extenso. Limite máximo de 9 Bilhões (9.999.999.999,99).</param>
        /// <returns>String do valor por Extenso</returns>
        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 strDezCentavo = "";

            decimal dblCentavos = 0;
            decimal dblValorInteiro = 0;
            int intContador = 0;
            bool bln_Bilhao = false;
            bool bln_Milhao = false;
            bool bln_Mil = false;
            bool bln_Unidade = false;

            //Verificar se foi informado um dado indevido
            if (pdbl_Valor == 0 || pdbl_Valor <= 0)
            {
                throw new Exception("Valor não suportado pela Função. Verificar se há valor negativo ou nada foi informado");
            }
            if (pdbl_Valor > (decimal)9999999999.99)
            {
                throw new Exception("Valor não suportado pela Função. Verificar se o Valor está acima de 9999999999.99");
            }
            else //Entrada padrão do método
            {
                //Gerar Extenso Centavos
                pdbl_Valor = (Decimal.Round(pdbl_Valor, 2));
                dblCentavos = pdbl_Valor - (Int64)pdbl_Valor;

                //Gerar Extenso parte Inteira
                dblValorInteiro = (Int64)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 e" : " Bilhão e");
                                    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" : " Milhões");
                                            strValorExtenso = strValorExtenso + (( int.Parse(strNumero) > 1000000) ? " " : " e");
                                            bln_Milhao = true;
                                        }
                                    }
                                    if (i == 3)
                                    {
                                        if (bln_Mil || int.Parse(strNumero) > 0)
                                        {
                                            strValorExtenso = strValorExtenso + " Mil";
                                            strValorExtenso = strValorExtenso + ((int.Parse(strNumero) > 1000) ? " " : " e");
                                            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 + " e ";
                                        }
                                        strValorExtenso = strValorExtenso + ((Int64.Parse(dblValorInteiro.ToString())) > 1 ? " Reais" : " Real");
                                    }
                                    bln_Unidade = false;
                                    break;
                                }
                        }
                    }//
                }
                if (dblCentavos > 0)
                {

                    if (dblCentavos > 0 && dblCentavos < 0.1M)
                    {
                        strNumero = Right((Decimal.Round(dblCentavos, 2)).ToString().Trim(), 1);
                        strValorExtenso = strValorExtenso + ((dblCentavos > 0) ? " e " : " ")
                        + fcn_Numero_Unidade(strNumero) + ((dblCentavos > 0.01M) ? " Centavos" : " Centavo");
                    }
                    else if (dblCentavos > 0.1M && dblCentavos < 0.2M)
                    {
                        strNumero = Right(((Decimal.Round(dblCentavos, 2) - (decimal)0.1).ToString().Trim()), 1);
                        strValorExtenso = strValorExtenso + ((dblCentavos > 0) ? " " : " e ")
                        + fcn_Numero_Dezena0(strNumero) + " Centavos ";
                    }
                    else
                    {
                        strNumero = Right(dblCentavos.ToString().Trim(), 2);
                        strDezCentavo = Mid(dblCentavos.ToString().Trim(), 2, 1);

                        strValorExtenso = strValorExtenso + ((int.Parse(strNumero) > 0) ? " e " : " ");
                        strValorExtenso = strValorExtenso + fcn_Numero_Dezena1(Left(strDezCentavo, 1));

                        if ((dblCentavos.ToString().Trim().Length) > 2)
                        {                       
                            strNumero = Right((Decimal.Round(dblCentavos, 2)).ToString().Trim(), 1);
                            if (int.Parse(strNumero) > 0)
                            {
                                if (dblValorInteiro <= 0)
                                {
                                    if (Mid( strValorExtenso.Trim(), strValorExtenso.Trim().Length - 2, 1) == "e")
                                    {
                                        strValorExtenso = strValorExtenso + " e " + fcn_Numero_Unidade(strNumero);
                                    }
                                    else
                                    {
                                        strValorExtenso = strValorExtenso + " e " + 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[ Int16.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;
        }
        ////Acaba aqui os Métodos de Compatibilazação com VB 6 .........
    }
    Tuesday, April 01, 2008 1:01 PM
  • cARA PARABÉNS PELA FUNCTION, TESTEI E FUNCIONA PERFEITAMENTE, SÓ TEM UM DETALHE NO MEU CASO VOU USAR PARA VALOR EM MONEY E NÃO EM DECIMAL O QUE EU PRECISO FAZER PARA FUNCIONAR COM MONEY TENTEI MAS NÃO OBTIVE SUCESSO.

    OBRIGADO.

    Friday, September 10, 2010 1:55 PM
  • Pessoal,

     

    Estou precisando de uma classe .NET que faça conversão de valor em double para extenso...

     

    Será que alguém pode me ajudar?

     

    Obrigado,

    Bom turma, segue abaixo a minha implementação, são várias classes (obs.: tá em VB)...

     

    • ConfiguracaoMoeda.vb
    Namespace EscritorMoedaCorrente
     Public Class ConfiguracaoMoeda
      Private _moedaSingular As String
      Private _moedaPlural As String
      Private _fracaoSingular As String
      Private _fracaoPlural As String
    
      Public Property MoedaSingular() As String
       Get
        Return _moedaSingular
       End Get
       Set(ByVal value As String)
        _moedaSingular = value
       End Set
      End Property
    
      Public Property MoedaPlural() As String
       Get
        Return _moedaPlural
       End Get
       Set(ByVal value As String)
        _moedaPlural = value
       End Set
      End Property
    
      Public Property FracaoSingular() As String
       Get
        Return _fracaoSingular
       End Get
       Set(ByVal value As String)
        _fracaoSingular = value
       End Set
      End Property
    
      Public Property FracaoPlural() As String
       Get
        Return _fracaoPlural
       End Get
       Set(ByVal value As String)
        _fracaoPlural = value
       End Set
      End Property
    
      Public Sub New()
    
      End Sub
     End Class
    End Namespace
    


    • EscritorEspanhol.vb
    Imports System.Collections.Generic
    Imports System.Text
    
    Namespace EscritorMoedaCorrente
     ''' <summary>
     ''' Escritor por extenso em espanhol (es)
     ''' </summary>
     ''' <remarks></remarks>
     Public NotInheritable Class EscritorEspanhol
      Inherits BaseEscritor
      Implements IEscritorMoedaCorrente, IEscritor
    
      Private CENTO As String = "ciento"
      Private CEM As String = "cien"
      Private PARTICULA_ADITIVA As String = "y"
      Private PARTICULA_DESCRITIVA As String = "de"
    
      Private VALOR_FORA_LIMITE As String = "Valor fuera de la banda suportada."
    
      Public Sub New()
       preencherGrandezasPlural()
       preencherGrandezasSingular()
       preencherNomes()
      End Sub
    
      Public Function ObterEscritor() As IEscritor Implements IEscritorMoedaCorrente.ObterEscritor
       Return Me
      End Function
    
      Public Function Escrever(ByVal quantidade As Decimal, ByVal configuracao As ConfiguracaoMoeda) As String Implements IEscritor.Escrever
       MOEDA_SINGULAR = configuracao.MoedaSingular
       MOEDA_PLURAL = configuracao.MoedaPlural
       FRACAO_SINGULAR = configuracao.FracaoSingular
       FRACAO_PLURAL = configuracao.FracaoPlural
       Return obterValorExtenso(quantidade)
      End Function
    
      Private Function obterValorExtenso(ByVal quantidade As Decimal) As String
       If (quantidade = Nothing) Then Throw New ArgumentOutOfRangeException()
    
       Dim valor As Decimal = Decimal.Round(quantidade, 2, MidpointRounding.ToEven)
    
       If (valor.CompareTo(Decimal.Zero) <= 0) Then Return String.Empty
    
       If (MAX_SUPPORTED_VALUE.CompareTo(valor) < 0) Then Throw New ArgumentOutOfRangeException(VALOR_FORA_LIMITE)
    
       Dim decomposto As Stack(Of Integer) = decompor(valor)
       ' Se o número estiver, digamos, na casa dos milhões, a pilha 
       ' deverá conter 4 elementos sendo os dois últimos os das 
       ' centenas e dos centavos, respectivamente. Assim, o expoente de
       ' dez que representa a grandeza no topo da pilha é o número de 
       ' (elementos - 2) * 3
       Dim expoente As Integer = 3 * (decomposto.Count - 2) ' TODO: usar um índice de grupos ao invés do expoente
    
       Dim sb As StringBuilder = New StringBuilder()
       Dim ultimoExpoenteNaoZero As Integer = -1
    
       While (Not decomposto.Count = 0)
        Dim valorDecomposto As Integer = decomposto.Pop
        If (valorDecomposto > 0) Then
         If grandezasSingular.ContainsKey(ultimoExpoenteNaoZero) Then
          sb.Append(" ")
         Else
          sb.Append(" ").Append(PARTICULA_ADITIVA).Append(" ")
         End If
         sb.Append(comporNomeGrupos(expoente, valorDecomposto))
         Dim nomeGrandeza As String = obterNomeGrandeza(expoente, valorDecomposto)
         If nomeGrandeza.Length > 0 Then
          Select Case expoente
           Case 3, 9, 15, 21
            If Not valorDecomposto = 1 Then
             sb.Append(" ")
            End If
           Case Else
            sb.Append(" ")
          End Select
         End If
         sb.Append(nomeGrandeza)
         ultimoExpoenteNaoZero = expoente
        End If
    
        Select Case expoente
         ' TODO: ao invés desses switches e ifs, partir para a idéia das "Pendências";
         '  talvez implementá-las com enum
         Case 0
          Dim parteInteira As Decimal = Decimal.Floor(valor)
          If (Decimal.One.Equals(parteInteira)) Then
           sb.Append(" ").Append(MOEDA_SINGULAR)
          ElseIf (parteInteira.CompareTo(Long.Parse("0")) > 0) Then
           If ultimoExpoenteNaoZero >= 6 Then
            sb.Append(" ").Append(PARTICULA_DESCRITIVA)
           End If
           sb.Append(" ").Append(MOEDA_PLURAL)
          End If
         Case -3
          If valorDecomposto = 1 Then
           sb.Append(" ").Append(FRACAO_SINGULAR)
          ElseIf valorDecomposto > 1 Then
           sb.Append(" ").Append(FRACAO_PLURAL)
          End If
        End Select
        expoente -= 3
       End While
    
       Return sb.ToString(3, sb.Length - 3)
      End Function
    
      Private Function decompor(ByVal valor As Decimal) As Stack(Of Integer)
       Try
        Dim intermediario As Decimal = Decimal.Multiply(valor, 100)
        Dim decomposto As Stack(Of Integer) = New Stack(Of Integer)()
        Dim resultado() As Decimal = New Decimal() {Decimal.Floor(Decimal.Divide(intermediario, HUNDRED)), Decimal.Floor(Decimal.Remainder(intermediario, HUNDRED))}
        intermediario = resultado(0)
        decomposto.Push(resultado(1))
        While (intermediario.CompareTo(Decimal.Zero) > 0)
         resultado = New Decimal() {Decimal.Floor(Decimal.Divide(intermediario, THOUSAND)), Decimal.Floor(Decimal.Remainder(intermediario, THOUSAND))}
         intermediario = resultado(0)
         decomposto.Push(resultado(1))
        End While
        ' Se o valor for apenas em centavos, adicionar zero para a casa dos reais(inteiros)
        If (decomposto.Count = 1) Then decomposto.Push(0)
        Return decomposto
       Catch ex As OverflowException
        Throw New ArgumentOutOfRangeException(VALOR_FORA_LIMITE)
       End Try
      End Function
    
      Private Function comporNomeGrupos(ByVal expoente As Integer, ByVal valor As Integer) As StringBuilder
       Dim nome As StringBuilder = New StringBuilder()
    
       Dim centenas As Integer = valor - (valor Mod 100)
       Dim unidades As Integer = valor Mod 10
       Dim dezenas As Integer = (valor - centenas) - unidades
       Dim duasCasas As Integer = dezenas + unidades
    
       If (centenas > 0) Then
        nome.Append(" ").Append(PARTICULA_ADITIVA).Append(" ")
        If (100 = centenas) Then
         If (duasCasas > 0) Then
          nome.Append(CENTO)
         Else
          nome.Append(CEM)
         End If
        Else
         nome.Append(nomes.Item(centenas))
        End If
       End If
    
       If (duasCasas > 0) Then
        If (centenas > 0) Then
         nome.Append(" ")
        Else
         nome.Append(" ").Append(PARTICULA_ADITIVA).Append(" ")
        End If
        If (duasCasas < 30) Then
         Select Case expoente
          Case 3, 9, 15, 21
           If Not valor = 1 Then
            nome.Append(nomes.Item(duasCasas))
           End If
          Case Else
           nome.Append(nomes.Item(duasCasas))
         End Select
        Else
         If (dezenas > 0) Then
          nome.Append(nomes.Item(dezenas))
         End If
    
         If (unidades > 0) Then
          nome.Append(" ").Append(PARTICULA_ADITIVA).Append(" ")
          nome.Append(nomes.Item(unidades))
         End If
        End If
       End If
    
       Return nome.Remove(0, 3)
      End Function
    
      Private Function obterNomeGrandeza(ByVal expoente As Integer, ByVal valor As Integer) As String
       If (expoente < 3) Then Return ""
    
       If (valor = 1) Then
        Return grandezasSingular.Item(expoente)
       Else
        Return grandezasPlural.Item(expoente)
       End If
      End Function
    
      Private Sub preencherGrandezasPlural()
       grandezasPlural.Add(3, "mil")
       grandezasPlural.Add(6, "millones")
       grandezasPlural.Add(9, "mil millones")
       grandezasPlural.Add(12, "billones")
       grandezasPlural.Add(15, "mil billones")
       grandezasPlural.Add(18, "trillones")
       grandezasPlural.Add(21, "mil trillones")
       grandezasPlural.Add(24, "quatrillones")
      End Sub
    
      Private Sub preencherGrandezasSingular()
       grandezasSingular.Add(3, "mil")
       grandezasSingular.Add(6, "millón")
       grandezasSingular.Add(9, "mil millones")
       grandezasSingular.Add(12, "billón")
       grandezasSingular.Add(15, "mil billones")
       grandezasSingular.Add(18, "trillón")
       grandezasSingular.Add(21, "mil trillones")
       grandezasSingular.Add(24, "quatrillón")
      End Sub
    
      Private Sub preencherNomes()
       nomes.Add(1, "un")
       nomes.Add(2, "dos")
       nomes.Add(3, "tres")
       nomes.Add(4, "cuatro")
       nomes.Add(5, "cinco")
       nomes.Add(6, "seis")
       nomes.Add(7, "siete")
       nomes.Add(8, "ocho")
       nomes.Add(9, "nueve")
       nomes.Add(10, "diez")
       nomes.Add(11, "once")
       nomes.Add(12, "doce")
       nomes.Add(13, "trece")
       nomes.Add(14, "catorce")
       nomes.Add(15, "quince")
       nomes.Add(16, "dieciseis")
       nomes.Add(17, "diecisiete")
       nomes.Add(18, "dieciocho")
       nomes.Add(19, "diecinueve")
       nomes.Add(20, "veinte")
       nomes.Add(21, "veintiún")
       nomes.Add(22, "veintidos")
       nomes.Add(23, "veintitrés")
       nomes.Add(24, "veinticuatro")
       nomes.Add(25, "veinticinco")
       nomes.Add(26, "veintiséis")
       nomes.Add(27, "veintisiete")
       nomes.Add(28, "veintiocho")
       nomes.Add(29, "veintinueve")
       nomes.Add(30, "treinta")
       nomes.Add(40, "cuarenta")
       nomes.Add(50, "cincuenta")
       nomes.Add(60, "sesenta")
       nomes.Add(70, "setenta")
       nomes.Add(80, "ochenta")
       nomes.Add(90, "noventa")
       nomes.Add(200, "doscientos")
       nomes.Add(300, "trescientos")
       nomes.Add(400, "cuatrocientos")
       nomes.Add(500, "quinientos")
       nomes.Add(600, "seiscientos")
       nomes.Add(700, "setecientos")
       nomes.Add(800, "ochocientos")
       nomes.Add(900, "novecientos")
      End Sub
     End Class
    End Namespace
    


    • EscritorPortugues.vb
    Imports System.Collections.Generic
    Imports System.Text
    
    Namespace EscritorMoedaCorrente
     ''' <summary>
     ''' Escritor por extenso em português (pt)
     ''' </summary>
     ''' <remarks></remarks>
     Public NotInheritable Class EscritorPortugues
      Inherits BaseEscritor
      Implements IEscritorMoedaCorrente, IEscritor
    
      Private CENTO As String = "cento"
      Private CEM As String = "cem"
      Private PARTICULA_ADITIVA As String = "e"
      Private PARTICULA_DESCRITIVA As String = "de"
    
      Private VALOR_FORA_LIMITE As String = "Valor acima do limite suportado."
    
      Public Sub New()
       preencherGrandezasPlural()
       preencherGrandezasSingular()
       preencherNomes()
      End Sub
    
      Public Function ObterEscritor() As IEscritor Implements IEscritorMoedaCorrente.ObterEscritor
       Return Me
      End Function
    
      Public Function Escrever(ByVal quantidade As Decimal, ByVal configuracao As ConfiguracaoMoeda) As String Implements IEscritor.Escrever
       MOEDA_SINGULAR = configuracao.MoedaSingular
       MOEDA_PLURAL = configuracao.MoedaPlural
       FRACAO_SINGULAR = configuracao.FracaoSingular
       FRACAO_PLURAL = configuracao.FracaoPlural
       Return obterValorExtenso(quantidade)
      End Function
    
      Private Function obterValorExtenso(ByVal quantidade As Decimal) As String
       If (quantidade = Nothing) Then Throw New ArgumentOutOfRangeException()
    
       Dim valor As Decimal = Decimal.Round(quantidade, 2, MidpointRounding.ToEven)
    
       If (valor.CompareTo(Decimal.Zero) <= 0) Then Return String.Empty
    
       If (MAX_SUPPORTED_VALUE.CompareTo(valor) < 0) Then Throw New ArgumentOutOfRangeException(VALOR_FORA_LIMITE)
    
       Dim decomposto As Stack(Of Integer) = decompor(valor)
       ' Se o número estiver, digamos, na casa dos milhões, a pilha 
       ' deverá conter 4 elementos sendo os dois últimos os das 
       ' centenas e dos centavos, respectivamente. Assim, o expoente de
       ' dez que representa a grandeza no topo da pilha é o número de 
       ' (elementos - 2) * 3
       Dim expoente As Integer = 3 * (decomposto.Count - 2) ' TODO: usar um índice de grupos ao invés do expoente
    
       Dim sb As StringBuilder = New StringBuilder()
       Dim ultimoExpoenteNaoZero As Integer = -1
    
       While (Not decomposto.Count = 0)
        Dim valorDecomposto As Integer = decomposto.Pop
        If (valorDecomposto > 0) Then
         sb.Append(" ").Append(PARTICULA_ADITIVA).Append(" ")
         sb.Append(comporNomeGrupos(valorDecomposto))
         Dim nomeGrandeza As String = obterNomeGrandeza(expoente, valorDecomposto)
         If nomeGrandeza.Length > 0 Then
          sb.Append(" ")
         End If
         sb.Append(nomeGrandeza)
         ultimoExpoenteNaoZero = expoente
        End If
    
        Select Case expoente
         ' TODO: ao invés desses switches e ifs, partir para a idéia das "Pendências";
         '  talvez implementá-las com enum
         Case 0
          Dim parteInteira As Decimal = Decimal.Floor(valor)
          If (Decimal.One.Equals(parteInteira)) Then
           sb.Append(" ").Append(MOEDA_SINGULAR)
          ElseIf (parteInteira.CompareTo(Long.Parse("0")) > 0) Then
           If ultimoExpoenteNaoZero >= 6 Then
            sb.Append(" ").Append(PARTICULA_DESCRITIVA)
           End If
           sb.Append(" ").Append(MOEDA_PLURAL)
          End If
         Case -3
          If valorDecomposto = 1 Then
           sb.Append(" ").Append(FRACAO_SINGULAR)
          ElseIf valorDecomposto > 1 Then
           sb.Append(" ").Append(FRACAO_PLURAL)
          End If
        End Select
        expoente -= 3
       End While
    
       Return sb.ToString(3, sb.Length - 3)
      End Function
    
      Private Function decompor(ByVal valor As Decimal) As Stack(Of Integer)
       Try
        Dim intermediario As Decimal = Decimal.Multiply(valor, 100)
        Dim decomposto As Stack(Of Integer) = New Stack(Of Integer)()
        Dim resultado() As Decimal = New Decimal() {Decimal.Floor(Decimal.Divide(intermediario, HUNDRED)), Decimal.Floor(Decimal.Remainder(intermediario, HUNDRED))}
        intermediario = resultado(0)
        decomposto.Push(resultado(1))
        While (intermediario.CompareTo(Decimal.Zero) > 0)
         resultado = New Decimal() {Decimal.Floor(Decimal.Divide(intermediario, THOUSAND)), Decimal.Floor(Decimal.Remainder(intermediario, THOUSAND))}
         intermediario = resultado(0)
         decomposto.Push(resultado(1))
        End While
        ' Se o valor for apenas em centavos, adicionar zero para a casa dos reais(inteiros)
        If (decomposto.Count = 1) Then decomposto.Push(0)
        Return decomposto
       Catch ex As OverflowException
        Throw New ArgumentOutOfRangeException(VALOR_FORA_LIMITE)
       End Try
      End Function
    
      Private Function comporNomeGrupos(ByVal valor As Integer) As StringBuilder
       Dim nome As StringBuilder = New StringBuilder()
    
       Dim centenas As Integer = valor - (valor Mod 100)
       Dim unidades As Integer = valor Mod 10
       Dim dezenas As Integer = (valor - centenas) - unidades
       Dim duasCasas As Integer = dezenas + unidades
    
       If (centenas > 0) Then
        nome.Append(" ").Append(PARTICULA_ADITIVA).Append(" ")
        If (100 = centenas) Then
         If (duasCasas > 0) Then
          nome.Append(CENTO)
         Else
          nome.Append(CEM)
         End If
        Else
         nome.Append(nomes.Item(centenas))
        End If
       End If
    
       If (duasCasas > 0) Then
        nome.Append(" ").Append(PARTICULA_ADITIVA).Append(" ")
        If (duasCasas < 20) Then
         nome.Append(nomes.Item(duasCasas))
        Else
         If (dezenas > 0) Then
          nome.Append(nomes.Item(dezenas))
         End If
    
         If (unidades > 0) Then
          nome.Append(" ").Append(PARTICULA_ADITIVA).Append(" ")
          nome.Append(nomes.Item(unidades))
         End If
        End If
       End If
    
       Return nome.Remove(0, 3)
      End Function
    
      Private Function obterNomeGrandeza(ByVal expoente As Integer, ByVal valor As Integer) As String
       If (expoente < 3) Then Return ""
    
       If (valor = 1) Then
        Return grandezasSingular.Item(expoente)
       Else
        Return grandezasPlural.Item(expoente)
       End If
      End Function
    
      Private Sub preencherGrandezasPlural()
       grandezasPlural.Add(3, "mil")
       grandezasPlural.Add(6, "milhões")
       grandezasPlural.Add(9, "bilhões")
       grandezasPlural.Add(12, "trilhões")
       grandezasPlural.Add(15, "quatrilhões")
       grandezasPlural.Add(18, "quintilhões")
       grandezasPlural.Add(21, "sextilhões")
       grandezasPlural.Add(24, "setilhões")
      End Sub
    
      Private Sub preencherGrandezasSingular()
       grandezasSingular.Add(3, "mil")
       grandezasSingular.Add(6, "milhão")
       grandezasSingular.Add(9, "bilhão")
       grandezasSingular.Add(12, "trilhão")
       grandezasSingular.Add(15, "quatrilhão")
       grandezasSingular.Add(18, "quintilhão")
       grandezasSingular.Add(21, "sextilhão")
       grandezasSingular.Add(24, "setilhão")
      End Sub
    
      Private Sub preencherNomes()
       nomes.Add(1, "um")
       nomes.Add(2, "dois")
       nomes.Add(3, "três")
       nomes.Add(4, "quatro")
       nomes.Add(5, "cinco")
       nomes.Add(6, "seis")
       nomes.Add(7, "sete")
       nomes.Add(8, "oito")
       nomes.Add(9, "nove")
       nomes.Add(10, "dez")
       nomes.Add(11, "onze")
       nomes.Add(12, "doze")
       nomes.Add(13, "treze")
       nomes.Add(14, "quatorze")
       nomes.Add(15, "quinze")
       nomes.Add(16, "dezesseis")
       nomes.Add(17, "dezessete")
       nomes.Add(18, "dezoito")
       nomes.Add(19, "dezenove")
       nomes.Add(20, "vinte")
       nomes.Add(30, "trinta")
       nomes.Add(40, "quarenta")
       nomes.Add(50, "cinquenta")
       nomes.Add(60, "sessenta")
       nomes.Add(70, "setenta")
       nomes.Add(80, "oitenta")
       nomes.Add(90, "noventa")
       nomes.Add(200, "duzentos")
       nomes.Add(300, "trezentos")
       nomes.Add(400, "quatrocentos")
       nomes.Add(500, "quinhentos")
       nomes.Add(600, "seiscentos")
       nomes.Add(700, "setecentos")
       nomes.Add(800, "oitocentos")
       nomes.Add(900, "novecentos")
      End Sub
     End Class
    End Namespace
    


    • BaseEscritor.vb
    Imports System.Collections.Generic
    
    Namespace EscritorMoedaCorrente
     Public MustInherit Class BaseEscritor
      Protected Friend MAX_SUPPORTED_VALUE As Decimal = Decimal.Parse("99999999999999999999999999,99")
      Protected Friend Const THOUSAND As Integer = 1000
      Protected Friend Const HUNDRED As Integer = 100
    
      Protected Friend MOEDA_SINGULAR As String = String.Empty
      Protected Friend MOEDA_PLURAL As String = String.Empty
    
      Protected Friend FRACAO_SINGULAR As String = String.Empty
      Protected Friend FRACAO_PLURAL As String = String.Empty
    		
      Protected Friend grandezasPlural As Dictionary(Of Integer, String) = New Dictionary(Of Integer, String)()
      Protected Friend grandezasSingular As Dictionary(Of Integer, String) = New Dictionary(Of Integer, String)()
      Protected Friend nomes As Dictionary(Of Integer, String) = New Dictionary(Of Integer, String)()
     End Class
    End Namespace
    


    • FabricaEscritorMoedaCorrente.vb
    Namespace EscritorMoedaCorrente
    
     ''' <summary>
     ''' Classe factory para o escritor de moeda corrente
     ''' </summary>
     ''' <remarks></remarks>
     Public Class FabricaEscritorMoedaCorrente
      ''' <summary>
      ''' Método que irá retornar a instância do escritor definido pela cultura
      ''' </summary>
      ''' <returns></returns>
      ''' <remarks></remarks>
      Public Function EscritorMoedaCorrente() As IEscritorMoedaCorrente
       Dim cultura As Globalization.CultureInfo = Threading.Thread.CurrentThread.CurrentCulture
       Select Case cultura.TwoLetterISOLanguageName
        Case "pt"
         Return New EscritorPortugues()
        Case "es"
         Return New EscritorEspanhol()
        Case Else
         Throw New ArgumentException("Cultura não suportada pelo Escritor de Moeda Corrente." + vbCrLf + "Cultura selecionada: " + cultura.DisplayName)
       End Select
      End Function
     End Class
    End Namespace
    


    • IEscritorMoedaCorrente.vb
    Namespace EscritorMoedaCorrente
    
     Public Interface IEscritorMoedaCorrente
      Function ObterEscritor() As IEscritor
     End Interface
    End Namespace
    


    • IEscritor.vb
    Namespace EscritorMoedaCorrente
    
     Public Interface IEscritor
      Function Escrever(ByVal quantidade As Decimal, ByVal configuracao As ConfiguracaoMoeda) As String
     End Interface
    End Namespace
    

    É issae turma, espero que façam bom uso, pois me foi muito útil...

    abs!
    • Edited by Rafael Tudela Friday, December 03, 2010 10:34 PM Arrumar a confusão de código.
    Friday, December 03, 2010 10:32 PM