Module: Extenso

Included in:
ExtensoReal
Defined in:
lib/brnumeros/number_portuguese.rb

Constant Summary collapse

@@unidade =
{
  0 => "zero",
  1 => "um",
  2 => "dois",
  3 => "três",
  4 => "quatro",
  5 => "cinco",
  6 => "seis",
  7 => "sete",
  8 => "oito",
  9 => "nove"
}
@@dezena =
{
10 => "dez",
11 => "onze",
12 => "doze",
13 => "treze",
14 => "quatorze",
15 => "quinze",
16 => "dezesseis",
17 => "dezessete",
18 => "dezoito",
19 => "dezenove",
20 => "vinte",
30 => "trinta",
40 => "quarenta",
50 => "cinquenta",
60 => "sessenta",
70 => "setenta",
80 => "oitenta",
90 => "noventa"  }
@@centena =
{100 => "cento",
200 => "duzentos",
300 => "trezentos",
400 => "quatrocentos",
500 => "quinhentos",
600 => "seiscentos",
700 => "setecentos",
800 => "oitocentos",
900 => "novecentos"  }

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.por_extenso(numero) ⇒ Object

Escreve o numero por extenso.

Exemplo:

Extenso.por_extenso(1) ==> "um"
Extenso.por_extenso(100) ==> "cem"
Extenso.por_extenso(158) ==> "cento e cinquenta e oito"


63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/brnumeros/number_portuguese.rb', line 63

def Extenso.por_extenso(numero)
  negativo=(numero<0)? "menos " : ""
  n=numero.to_i.abs
  return case n
  when 0..9 then negativo + @@unidade[n].to_s
  when 10..19 then negativo + @@dezena[n].to_s
  when 20..99
    v=n % 10
    if  v== 0
      negativo + @@dezena[n].to_s
    else
      "#{negativo}#{@@dezena[n-v]} e #{por_extenso(v)}"
    end
  when 100
    negativo+"cem"
  when 101..999
    v=n % 100
    if  v== 0
      negativo + @@centena[n].to_s
    else
      "#{negativo}#{@@centena[n-v]} e #{por_extenso(v)}"
    end
  when 1000..999999
    m,c=n/1000,n%1000
    %(#{negativo}#{por_extenso(m)} mil#{c > 0 ? " e #{por_extenso(c)}":''})
  when 1_000_000..999_999_999
    mi,m=n/1_000_000,n%1_000_000
    %(#{negativo}#{por_extenso(mi)} milh#{mi > 1 ? 'ões':'ão'}#{m > 0 ? " e #{por_extenso(m)}" : ''})
  when 1_000_000_000..999_999_999_999
    bi,mi=n/1_000_000_000,n%1_000_000_000
    %(#{negativo}#{por_extenso(bi)} bilh#{bi > 1 ? 'ões':'ão'}#{mi > 0 ? " e #{por_extenso(mi)}" : ''})
  when 1_000_000_000_000..999_999_999_999_999
    tri,bi=n/1_000_000_000_000,n%1_000_000_000_000
    %(#{negativo}#{por_extenso(tri)} trilh#{tri > 1 ? 'ões':'ão'}#{bi > 0 ? " e #{por_extenso(bi)}" : ''})
  else
    raise "Valor excede o permitido: #{n}"
  end
end

Instance Method Details

#por_extensoObject

Escreve o numero por extenso.

Exemplo:

1.por_extenso ==> 'um'
100.por_extenso ==> 'cem'
158.por_extenso ==> 'cento e cinquenta e oito'


50
51
52
# File 'lib/brnumeros/number_portuguese.rb', line 50

def por_extenso
  Extenso.por_extenso(self)
end

#to_extensoObject

Escreve o numero por extenso.

Exemplo:

1.por_extenso ==> 'um'
100.por_extenso ==> 'cem'
158.por_extenso ==> 'cento e cinquenta e oito'

Alias para o metodo por_extenso



55
56
57
# File 'lib/brnumeros/number_portuguese.rb', line 55

def por_extenso
  Extenso.por_extenso(self)
end