numeroaletras 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/numeroaletras.rb +120 -0
- metadata +43 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 1521e1baa981f540f3efbb812d28ae66eb4d6e7a
|
4
|
+
data.tar.gz: a14ee3bb674229b232ec717f1eaf5abb3e8bd0cd
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d7e1060444058b6a7a0b11ffdbda1faeb75130a8443007e3b8a87b685c37a84638e5ba9eccc42ff514a54ce80c0b109fcc080e27bf8365e0cb8b930b6ae1417f
|
7
|
+
data.tar.gz: 7a7a8345ea3c1a8db3d4fffc0568ab4f3894066dcfc25138a596d4787265e98ae1f4c06cffb75646f7a1ee1fd0e116d89e46c6c4f6a98c4a327f1caf30858604
|
@@ -0,0 +1,120 @@
|
|
1
|
+
module NumeroALetras
|
2
|
+
module Numeric
|
3
|
+
def self.included(recipiente)
|
4
|
+
recipiente.extend(ClassMethods)
|
5
|
+
recipiente.class_eval do
|
6
|
+
include InstanceMethods
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
module ClassMethods
|
12
|
+
end
|
13
|
+
|
14
|
+
module InstanceMethods
|
15
|
+
MONEDA_SINGULAR = 'bolivar'
|
16
|
+
MONEDA_PLURAL = 'bolivares'
|
17
|
+
CENTIMOS_SINGULAR = 'centimo'
|
18
|
+
CENTIMOS_PLURAL = 'centimos'
|
19
|
+
MAX_NUMERO = 999_999_999_999
|
20
|
+
UNIDADES = %w(cero uno dos tres cuatro cinco seis siete ocho nueve)
|
21
|
+
DECENAS = %w(diez once doce trece catorce quince dieciseis diecisiete dieciocho diecinueve)
|
22
|
+
DIEZ_DIEZ = %w(cero diez veinte treinta cuarenta cincuenta sesenta setenta ochenta noventa)
|
23
|
+
CIENTOS = %w(_ ciento doscientos trescientos cuatroscientos quinientos seiscientos setecientos ochocientos novecientos)
|
24
|
+
|
25
|
+
def a_letras
|
26
|
+
numero_entero = self.to_i
|
27
|
+
raise 'Rango soportado actualmente: [- +]999.999.999.999' if numero_entero > MAX_NUMERO
|
28
|
+
|
29
|
+
return 'menos ' + self.abs.a_letras if numero_entero < 0
|
30
|
+
|
31
|
+
parte_decimal = ((self.abs - numero_entero.abs) * 100).round
|
32
|
+
if(parte_decimal > 9)
|
33
|
+
letras_decimal = self.kind_of?(Float) ? " punto #{parte_decimal.a_letras}" : ''
|
34
|
+
else
|
35
|
+
letras_decimal = self.kind_of?(Float) ? " punto cero #{parte_decimal.a_letras}" : ''
|
36
|
+
end
|
37
|
+
|
38
|
+
case numero_entero
|
39
|
+
when 0..99 then leer_decenas(numero_entero)
|
40
|
+
when 100..999 then leer_centenas(numero_entero)
|
41
|
+
when 1000..999999 then leer_miles(numero_entero)
|
42
|
+
when 1000000..999999999 then leer_millones(numero_entero)
|
43
|
+
when 1000000000..999999999999 then leer_millardos(numero_entero)
|
44
|
+
end.gsub('_', ' ').squeeze(' ').strip.gsub('uno mil', 'un mil') + letras_decimal
|
45
|
+
end
|
46
|
+
|
47
|
+
def a_moneda
|
48
|
+
numero_entero = self.to_i
|
49
|
+
|
50
|
+
parte_decimal = ((self.abs - numero_entero.abs) * 100).round
|
51
|
+
|
52
|
+
centimos = (parte_decimal == 1) ? CENTIMOS_SINGULAR : CENTIMOS_PLURAL
|
53
|
+
moneda = (numero_entero == 1) ? MONEDA_SINGULAR : MONEDA_PLURAL
|
54
|
+
|
55
|
+
letras = numero_entero.a_letras.gsub('uno', 'un')
|
56
|
+
letras += ' de' if (letras =~ /(millon|millones)\z/)
|
57
|
+
|
58
|
+
letras_decimal = " con #{parte_decimal.a_letras.gsub('uno', 'un')} #{centimos}" if self.kind_of?(Float)
|
59
|
+
|
60
|
+
"#{letras} #{moneda}#{letras_decimal}"
|
61
|
+
end
|
62
|
+
|
63
|
+
def leer_decenas(numero)
|
64
|
+
numero_entero = numero.to_i
|
65
|
+
return UNIDADES[numero_entero] if numero_entero < 10
|
66
|
+
decena, unidad = numero_entero.divmod(10)
|
67
|
+
case numero_entero
|
68
|
+
when 10..19, 0 then DECENAS[unidad]
|
69
|
+
when 21..29 then "veinti#{UNIDADES[unidad]}"
|
70
|
+
else DIEZ_DIEZ[decena] + (unidad > 0 ? " y #{UNIDADES[unidad]}" : '')
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def leer_centenas(numero)
|
75
|
+
numero_entero = numero.to_i
|
76
|
+
centena, decena = numero_entero.divmod(100)
|
77
|
+
return 'cien' if numero_entero == 100
|
78
|
+
CIENTOS[centena] + (decena > 0 ? " #{leer_decenas(decena)}" : '')
|
79
|
+
end
|
80
|
+
|
81
|
+
def leer_miles(numero)
|
82
|
+
numero_entero = numero.to_i
|
83
|
+
millar, centena = numero_entero.divmod(1000)
|
84
|
+
millar_letras = case millar
|
85
|
+
when 2..9 then UNIDADES[millar]
|
86
|
+
when 10..99 then leer_decenas(millar)
|
87
|
+
when 100..999 then leer_centenas(millar)
|
88
|
+
else ''
|
89
|
+
end + ' mil '
|
90
|
+
millar_letras += leer_centenas(centena) if centena > 0
|
91
|
+
millar_letras
|
92
|
+
end
|
93
|
+
|
94
|
+
def leer_millones(numero)
|
95
|
+
numero_entero = numero.to_i
|
96
|
+
millon, millar = numero_entero.divmod(1000000)
|
97
|
+
millon_letras = case millon
|
98
|
+
when 1 then ' un millon '
|
99
|
+
when 2..9 then UNIDADES[millon]
|
100
|
+
when 10..99 then leer_decenas(millon)
|
101
|
+
when 100..999 then leer_centenas(millon)
|
102
|
+
else ''
|
103
|
+
end
|
104
|
+
millon_letras += ' millones ' unless millon == 1
|
105
|
+
millon_letras + case millar
|
106
|
+
when 1..999 then leer_centenas(millar)
|
107
|
+
when 1000..999999 then leer_miles(millar)
|
108
|
+
else ''
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def leer_millardos(numero)
|
113
|
+
numero_entero = numero.to_i
|
114
|
+
millardo, millon = numero_entero.divmod(1000000)
|
115
|
+
"#{leer_miles(millardo)} #{leer_millones(millon)}"
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
Numeric.send :include, NumeroALetras::Numeric
|
metadata
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: numeroaletras
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Efren Fuentes
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-09-30 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Esta gema permite convertir un numero en letras
|
14
|
+
email: efrenfuentes#gmail.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- lib/numeroaletras.rb
|
20
|
+
homepage: https://github.com/efrenfuentes
|
21
|
+
licenses: []
|
22
|
+
metadata: {}
|
23
|
+
post_install_message:
|
24
|
+
rdoc_options: []
|
25
|
+
require_paths:
|
26
|
+
- lib
|
27
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
28
|
+
requirements:
|
29
|
+
- - '>='
|
30
|
+
- !ruby/object:Gem::Version
|
31
|
+
version: '0'
|
32
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
33
|
+
requirements:
|
34
|
+
- - '>='
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '0'
|
37
|
+
requirements: []
|
38
|
+
rubyforge_project:
|
39
|
+
rubygems_version: 2.1.4
|
40
|
+
signing_key:
|
41
|
+
specification_version: 4
|
42
|
+
summary: Convierte un numero en letras
|
43
|
+
test_files: []
|