示例#1
0
        public string Extenso()
        {
            if (grupoFilho == null)
            {
                return(digito.Extenso());
            }
            else if (ValorSomenteDoGrupo() == 0)
            {
                return(grupoFilho.Extenso());
            }
            else
            {
                double valorGrupo     = digito.ValorTotal();
                string singularPlural = valorGrupo < 2 ? "singular" : "plural";
                string nomeGrupo      =
                    ResourceManagerHelper
                    .Instance
                    .ResourceManager
                    .GetString(string.Format("Extenso1e{0}{1}", (posicao - 1) * 3, singularPlural));

                double valorGrupoFilho = grupoFilho.ValorTotal();

                if (valorGrupoFilho == 0)
                {
                    return(string.Format("{0} {1}",
                                         digito.Extenso(),
                                         nomeGrupo));
                }
                else
                {
                    GrupoDe3Digitos proximoGrupoComValor = grupoFilho.PrimeiroGrupoComValor();
                    string          separador            = string.Empty;

                    if (proximoGrupoComValor.Posicao == 1)
                    {
                        if (Posicao == 2 &&
                            proximoGrupoComValor.numero >= 100 && proximoGrupoComValor.numero >= 10)
                        {
                            separador = string.Empty;
                        }
                        else
                        {
                            separador = " e";
                        }
                    }
                    else
                    {
                        separador = ",";
                    }

                    return(string.Format("{0} {1}{2} {3}",
                                         digito.Extenso(),
                                         nomeGrupo,
                                         separador,
                                         grupoFilho.Extenso()));
                }
            }
        }
示例#2
0
        public GrupoDe3Digitos PrimeiroGrupoComValor()
        {
            GrupoDe3Digitos result = null;

            if (ValorSomenteDoGrupo() > 0)
            {
                result = this;
            }
            else if (grupoFilho != null)
            {
                result = grupoFilho.PrimeiroGrupoComValor();
            }
            return(result);
        }
示例#3
0
        GrupoDe3Digitos GetGrupoPrincipal(double numeroOrigem)
        {
            double numero = numeroOrigem;

            double          posicao = 1;
            GrupoDe3Digitos grupo   = null;

            do
            {
                grupo = new GrupoDe3Digitos((long)(numero % (double)1000), posicao, grupo);
                posicao++;
                numero /= 1000;
            } while (numero > 0);
            return(grupo);
        }
示例#4
0
        public GrupoDe3Digitos(long numero, double posicao, GrupoDe3Digitos grupoFilho)
        {
            if (numero < 0)
            {
                throw new ArgumentOutOfRangeException(NUMERO_NEGATIVO);
            }
            else
            {
                this.numero     = numero;
                this.posicao    = posicao;
                this.grupoFilho = grupoFilho;
                double posicaoDigito = 1;
                Digito digito        = null;
                do
                {
                    switch ((posicaoDigito - 1) % 3)
                    {
                    case 0:
                        digito = new DigitoUnidade(numero % 10, posicaoDigito, digito);
                        break;

                    case 1:
                        digito = new DigitoDezena(numero % 10, posicaoDigito, digito);
                        break;

                    case 2:
                        digito = new DigitoCentena(numero % 10, posicaoDigito, digito);
                        break;
                    }
                    posicaoDigito++;
                    numero /= 10;
                } while (numero > 0);

                this.digito = digito;
            }
        }
示例#5
0
        /// <summary>
        /// Transforma um número em sua representação por extenso, em português.
        /// </summary>
        /// <param name="numeroOrigem">número a ser transformado</param>
        /// <returns></returns>
        public virtual string Extenso()
        {
            GrupoDe3Digitos grupo = GetGrupoPrincipal(numeroOrigem);

            return(grupo.Extenso());
        }