Class: Abaco::Converter
- Inherits:
-
Object
- Object
- Abaco::Converter
- Defined in:
- lib/abaco/converter.rb
Overview
Number converter
The convert converts numbers into Italian.
Defined Under Namespace
Classes: BigNumberError
Constant Summary collapse
- EXCEPTIONS =
{ 'unocento' => 'cento', 'unomila' => 'mille', 'uno m' => 'un m', /t\wmille/ => 'tunomila', 'ntaotto' => 'ntotto', 'ntauno' => 'ntuno', 'un miliardi' => 'un miliardo', 'un milioni' => 'un milione' }
- NUMBERS =
{ units: ['', 'uno', 'due', 'tre', 'quattro', 'cinque', 'sei', 'sette', 'otto', 'nove'], teens: ['dieci', 'undici', 'dodici', 'tredici', 'quattordici', 'quindici', 'sedici', 'diciassette', 'diciotto', 'diciannove'], tens: ['', 'dieci', 'venti', 'trenta', 'quaranta', 'cinquanta', 'sessanta', 'settanta', 'ottanta', 'novanta'] }
- SUFFIXES =
{ 3 => 'mila', 6 => 'milioni', 9 => 'miliardi' }
- MAX_NUMBER =
999999999999
Class Method Summary collapse
-
.convert(number) ⇒ String
Converts the given number into Italian words.
Class Method Details
.convert(number) ⇒ String
Converts the given number into Italian words.
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/abaco/converter.rb', line 42 def self.convert(number) if number > MAX_NUMBER raise BigNumberError, "Abaco can't convert numbers bigger than #{MAX_NUMBER}" end number = number.to_f tmp = number.to_i result = '' 9.step(3, -3) do |n| # Is the number in the 10^n form? if Math.log10(tmp).to_i >= n result += describe_part(tmp / 10 ** n) result += ' ' if n >= 6 result += SUFFIXES[n] result += ' ' if n >= 6 end tmp %= 10 ** n end decimal_part = '/' decimal_part += ('%.2f' % number).split('.').last result += describe_part(tmp) + decimal_part EXCEPTIONS.each_pair do |search, replace| result.gsub! search, replace end result end |