Skip to content

Instantly share code, notes, and snippets.

@pzaich
Created June 15, 2012 06:23
Show Gist options
  • Select an option

  • Save pzaich/2934991 to your computer and use it in GitHub Desktop.

Select an option

Save pzaich/2934991 to your computer and use it in GitHub Desktop.
In_Words Recursive to Octillion
module InWords
def in_words(*word_generated)
num_array = self.to_s.split("")
num_array.collect! { |x| x.to_i }
hundreds_place = ""
number_block = num_array.pop(num_array.length > 3 ? 3 : num_array.length)
word_generated << word_generator(number_block, hundreds_place)
#recursive call on in_words
if num_array.empty?
digit_label_splicer(word_generated.flatten).reverse.join.rstrip.lstrip
else
num_array.join.to_i.in_words(word_generated)
end
end
def tens(digit)
numbers_hash[digit]
end
def numbers_hash
{ 0 => "", 1 => "one", 2 => "two", 3 => "three", 4 => "four", 5 => "five", 6 => "six", 7 => "seven", 8 => "eight", 9 => "nine",
10 => "ten", 11 => "eleven", 12 => "twelve", 13 => "thirteen", 14 => "fourteen", 15 => "fifteen", 16 => "sixteen", 17 => "seventeen",
18 => "eighteen", 19 => "nineteen", 20 => "twenty", 30 => "thirty", 40 => "forty", 50 => "fifty", 60 => "sixty", 70 => "seventy",
80 => "eighty", 90 =>"ninety"}
end
def label_array
["", "thousand", "million", "billion", "trillion", "quadrillion", "quintillion", "sextillion", "septillion", "octillion" ]
end
def digit_label_splicer( array )
i = 0
array.collect! do |digit_segment|
unless digit_segment == ""
flag= digit_segment.rstrip.lstrip + " #{label_array[i]} "
end
i += 1
flag
end
end
def word_generator(number_array, hundreds_place)
if number_array.length == 3 && number_array[0] != 0
hundreds_place = "#{numbers_hash[number_array.first]} hundred "
end
if number_array.join.to_i != 0
remainder = number_array.join('').to_i % 100
remainder < 20 ? "#{hundreds_place}#{numbers_hash[remainder]}" : "#{hundreds_place}" + "#{numbers_hash[number_array[-2] * 10]} #{numbers_hash[number_array[-1]]}"
else
""
end
end
end
class Numeric
include InWords
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment