Initial import
This commit is contained in:
158
vendor/plugins/brazilian-rails/lib/number_portuguese.rb
vendored
Normal file
158
vendor/plugins/brazilian-rails/lib/number_portuguese.rb
vendored
Normal file
@@ -0,0 +1,158 @@
|
||||
module Extenso
|
||||
@@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" }
|
||||
|
||||
# Escreve o numero por extenso.
|
||||
#
|
||||
# Exemplo:
|
||||
# 1.por_extenso ==> 'um'
|
||||
# 100.por_extenso ==> 'cem'
|
||||
# 158.por_extenso ==> 'cento e cinquenta e oito'
|
||||
def por_extenso
|
||||
Extenso.por_extenso(self)
|
||||
end
|
||||
|
||||
# DEPRECATION WARNING: use por_extenso, pois este sera removido no proximo release.
|
||||
def to_extenso
|
||||
warn('DEPRECATION WARNING: use por_extenso, pois este sera removido no proximo release.')
|
||||
self.por_extenso
|
||||
end
|
||||
|
||||
# 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"
|
||||
def Extenso.por_extenso(numero)
|
||||
n=numero.to_i.abs
|
||||
return case n
|
||||
when 0..9: @@unidade[n].to_s
|
||||
when 10..19: @@dezena[n].to_s
|
||||
when 20..99:
|
||||
v=n % 10
|
||||
if v== 0
|
||||
@@dezena[n].to_s
|
||||
else
|
||||
"#{@@dezena[n-v]} e #{por_extenso(v)}"
|
||||
end
|
||||
when 100
|
||||
"cem"
|
||||
when 101..999
|
||||
v=n % 100
|
||||
if v== 0
|
||||
@@centena[n].to_s
|
||||
else
|
||||
"#{@@centena[n-v]} e #{por_extenso(v)}"
|
||||
end
|
||||
when 1000..999999
|
||||
m,c=n/1000,n%1000
|
||||
%(#{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
|
||||
%(#{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
|
||||
%(#{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
|
||||
%(#{por_extenso(tri)} trilh#{tri > 1 ? 'ões':'ão'}#{bi > 0 ? " e #{por_extenso(bi)}" : ''})
|
||||
else
|
||||
raise "Valor excede o permitido: #{n}"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
module ExtensoReal
|
||||
include Extenso
|
||||
|
||||
# Escreve por extenso em reais.
|
||||
#
|
||||
# Exemplo:
|
||||
# 1.por_extenso_em_reais ==> 'um real'
|
||||
# (100.58).por_extenso_em_reais ==> 'cem reais e cinquenta e oito centavos'
|
||||
def por_extenso_em_reais
|
||||
ExtensoReal.por_extenso_em_reais(self.to_s)
|
||||
end
|
||||
|
||||
# DEPRECATION WARNING: use por_extenso_em_reais, pois este sera removido no proximo release.
|
||||
def to_extenso_real
|
||||
warn('DEPRECATION WARNING: use por_extenso_em_reais, pois este sera removido no proximo release.')
|
||||
self.por_extenso_em_reais
|
||||
end
|
||||
|
||||
# Escreve o numero por extenso em reais.
|
||||
#
|
||||
# Exemplo:
|
||||
# Extenso.por_extenso_em_reais(1) ==> "um real"
|
||||
# Extenso.por_extenso_em_reais(100) ==> "cem reais"
|
||||
# Extenso.por_extenso_em_reais(100.58) ==> "cem reais e cinquenta e oito centavos"
|
||||
def ExtensoReal.por_extenso_em_reais(valor)
|
||||
return 'grátis' if valor == 0
|
||||
case valor
|
||||
when Integer
|
||||
extenso = Extenso.por_extenso(valor)
|
||||
if extenso =~ /^(.*)(ão$|ões$)/
|
||||
complemento = 'de '
|
||||
else
|
||||
complemento = ''
|
||||
end
|
||||
%(#{extenso} #{valor <= 1 ? 'real': "#{complemento}reais"})
|
||||
when Float
|
||||
real,cents=("%.2f" % valor).split(/\./).map{ |m| m.to_i}
|
||||
valor_cents=Extenso.por_extenso(cents%100)
|
||||
|
||||
valor_cents+= case cents.to_i%100
|
||||
when 0: ""
|
||||
when 1: " centavo"
|
||||
when 2..99: " centavos"
|
||||
end
|
||||
|
||||
if real.to_i > 0
|
||||
"#{ExtensoReal.por_extenso_em_reais(real.to_i)}#{cents > 0 ? ' e ' + valor_cents : ''}"
|
||||
else
|
||||
"#{valor_cents}"
|
||||
end
|
||||
else
|
||||
ExtensoReal.por_extenso_em_reais(valor.to_s.strip.gsub(/[^\d]/,'.').to_f)
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user