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())); } } }
public GrupoDe3Digitos PrimeiroGrupoComValor() { GrupoDe3Digitos result = null; if (ValorSomenteDoGrupo() > 0) { result = this; } else if (grupoFilho != null) { result = grupoFilho.PrimeiroGrupoComValor(); } return(result); }
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); }
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; } }
/// <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()); }