Class: Respanol::Numero
- Inherits:
-
Object
- Object
- Respanol::Numero
- Defined in:
- lib/respanol/numero.rb
Direct Known Subclasses
Constant Summary collapse
- UNIDADES =
%w( cero uno dos tres cuatro cinco seis siete ocho nueve )
- DECENA =
%w( diez once doce trece catorce quince dieciseis diecisiete dieciocho diecinueve )
- DECENAS =
%w[ diez viente treinta cuarenta cincuenta sesenta setenta ochenta noventa ].unshift('')
- CENTENARES =
%w[ ciento doscientos trescientos cuatrocientos quinientos seiscientos setecientos ochocientos novecientos ].unshift('')
- UNO_APOCOPE =
'un'
- MILLONS =
%w[ millon billon trillon cuatrillon quintillon sextillon septillon octillon nonillon decillon undecillon duodecillon tredecillon cuatordecillon quindecillon sexdecillon septendecillon octodecillon novendecillon vigintillon ].unshift('')
- UNIDAD_1K =
'mil'
- DECIMAL =
'coma'
Class Method Summary collapse
- .dos_ultimos_en_palabras(num, es_unidad = true) ⇒ Object
- .feminino ⇒ Object
- .millon_en_palabras(numero, es_unidad = true) ⇒ Object
- .numero_en_palabras(numero) ⇒ Object
- .tres_ultimos_en_palabras(num, es_unidad = true) ⇒ Object
- .unidad(num, es_unidad = true) ⇒ Object
- .unirse_palabras(*ps) ⇒ Object
Class Method Details
.dos_ultimos_en_palabras(num, es_unidad = true) ⇒ Object
66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/respanol/numero.rb', line 66 def self.dos_ultimos_en_palabras(num, es_unidad = true) ultimos_2 = num % 100 ultimo = ultimos_2 % 10 case ultimos_2 / 10 when 2 ultimo == 0 ? DECENAS[2] : "vienti#{unidad(ultimo, es_unidad)}" when 1 DECENA[ultimo] else s = "#{DECENAS[ultimos_2 / 10]}" s = s + "#{' y ' if (ultimos_2 / 10 >= 3)}#{unidad(ultimo, es_unidad)}" if ultimo > 0 s end end |
.feminino ⇒ Object
12 13 14 |
# File 'lib/respanol/numero.rb', line 12 def self.feminino FemininoNumero end |
.millon_en_palabras(numero, es_unidad = true) ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/respanol/numero.rb', line 46 def self.millon_en_palabras(numero, es_unidad = true) num = numero % 1_000_000 s_ultimos_3 = tres_ultimos_en_palabras(num, es_unidad) if num >= 1000 mil = (num % 1_000_000) / 1000 s_mil = case mil when 0 '' when 1 UNIDAD_1K else "#{tres_ultimos_en_palabras(mil, false)} #{UNIDAD_1K}" end end unirse_palabras(s_mil, s_ultimos_3) end |
.numero_en_palabras(numero) ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/respanol/numero.rb', line 20 def self.numero_en_palabras(numero) return self::UNIDADES[0] if numero == 0 num = numero millons = [] s_millons = [] es_unidad = true i_millon = 0 loop do # Obteno el millone millon = num % 1_000_000 millons.push millon # Escribo el millone s_millons.push("#{MILLONS[i_millon]}#{'es' if millon > 1}") if !es_unidad && millon >= 1 s_millons.push millon_en_palabras(millon, es_unidad) # Preparo a continuacion es_unidad = false i_millon += 1 num = num / 1_000_000 break if num == 0 end unirse_palabras(s_millons.reverse) end |
.tres_ultimos_en_palabras(num, es_unidad = true) ⇒ Object
81 82 83 84 85 86 87 |
# File 'lib/respanol/numero.rb', line 81 def self.tres_ultimos_en_palabras(num, es_unidad = true) return 'cien' if (num % 1000) == 100 s_ultimos_2 = dos_ultimos_en_palabras(num, es_unidad) s_centenar = self::CENTENARES[(num % 1000) / 100] if num >= 100 unirse_palabras(s_centenar, s_ultimos_2) end |
.unidad(num, es_unidad = true) ⇒ Object
89 90 91 92 93 94 |
# File 'lib/respanol/numero.rb', line 89 def self.unidad(num, es_unidad = true) ultimo = num % 10 return self::UNO_APOCOPE if !es_unidad && ultimo == 1 self::UNIDADES[ultimo] end |
.unirse_palabras(*ps) ⇒ Object
16 17 18 |
# File 'lib/respanol/numero.rb', line 16 def self.unirse_palabras(*ps) ps.flatten.join(' ').gsub(/\s+/, ' ').strip end |