Module: ITOEN
- Defined in:
- lib/itoen/errors.rb,
lib/itoen/version.rb,
lib/itoen/converter.rb
Defined Under Namespace
Classes: TooBigError
Constant Summary collapse
- VERSION =
"0.0.1"
- TABLE_0_9 =
%w(zero one two three four five six seven eight nine)
- TABLE_11_19 =
%w(eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen)
- TABLE_PER_10 =
%w(_ ten twenty thirty forty fifty sixty seventy eighty ninety)
- TABLE_POW_1000 =
%w(_ thousand million billion trillion quadrillion quintillion sextillion septillion octillion nonillion decillion undecillion duodecillion tredecillion quattuordecillion quindecillion sexdecillion septendecillion octodecillion novemdecillion vigintillion unvigintillion duovigintillion trevigintillion quattuorvigintillion quinvigintillion sexvigintillion septenvigintillion octovigintillion novemvigintillion trigintillion untrigintillion duotrigintillion tretrigintillion quattuortrigintillion quintrigintillion sextrigintillion septentrigintillion octotrigintillion novemtrigintillion quadragintillion unquadragintillion duoquadragintillion trequadragintillion quattuorquadragintillion quinquadragintillion sexquadragintillion septenquadragintillion octoquadragintillion novemquadragintillion quinquagintillion unquinquagintillion duoquinquagintillion trequinquagintillion quattuorquinquagintillion quinquinquagintillion sexquinquagintillion septenquinquagintillion octoquinquagintillion novemquinquagintillion sexagintillion unsexagintillion duosexagintillion tresexagintillion quattuorsexagintillion quinsexagintillion sexsexagintillion septsexagintillion octosexagintillion novemsexagintillion septuagintillion unseptuagintillion duoseptuagintillion treseptuagintillion quattuorseptuagintillion quinseptuagintillion sexseptuagintillion septseptuagintillion octoseptuagintillion novemseptuagintillion octogintillion unoctogintillion duooctogintillion treoctogintillion quattuoroctogintillion quinoctogintillion sexoctogintillion septoctogintillion octooctogintillion novemoctogintillion nonagintillion unnonagintillion duononagintillion trenonagintillion quattuornonagintillion quinnonagintillion sexnonagintillion septnonagintillion octononagintillion novemnonagintillion centillion)
Class Method Summary collapse
Class Method Details
.itoen(num) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 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 |
# File 'lib/itoen/converter.rb', line 23 def itoen(num) if num < 0 return "negative #{itoen(-num)}" end int, decimal = num.to_s.split('.').map{|_| _.each_char.map(&:to_i) } int = int.reverse ret = [] ret.concat(case num when 0..9 [TABLE_0_9[num]] when 11..19 [TABLE_11_19[num - 11]] when ->(n){ n < 100 } [ [ (int[1] != 0 ? TABLE_PER_10[int[1]] : ''), (int[0] != 0 ? '-' : ''), (int[0] != 0 ? TABLE_0_9[int[0]] : '') ].join ] when ->(n){ n < 1000 } under100 = int[0..1].reverse.join.to_i [ (int[2] != 0 ? "#{TABLE_0_9[int[2]]} hundred" : ''), (under100 != 0 ? itoen(under100) : '') ] else int.each_slice(3).map.with_index do |nums, digit| num = nums.reverse.join.to_i next nil if num == 0 begin "#{itoen(num)} #{digit != 0 ? TABLE_POW_1000.fetch(digit) : ''}" rescue IndexError raise TooBigError end end.reverse.select{|n| n} end) if decimal ret << 'point' ret.concat decimal.map{|d| itoen(d) } end ret.join(' ').strip end |