Skip to content

Instantly share code, notes, and snippets.

@michaelrkn
Created June 16, 2012 00:10
Show Gist options
  • Save michaelrkn/2939309 to your computer and use it in GitHub Desktop.
Save michaelrkn/2939309 to your computer and use it in GitHub Desktop.
numbers in words
class Integer
def in_words
up_to_twenty = { 0 => "\b",
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" }
tens = { 20 => "twenty",
30 => "thirty",
40 => "forty",
50 => "fifty",
60 => "sixty",
70 => "seventy",
80 => "eighty",
90 => "ninety" }
thousands_and_up = { 10 ** 3 => "thousand",
10 ** 6 => "million",
10 ** 9 => "billion",
10 ** 12 => "trillion" }
if self < 20
up_to_twenty[self]
elsif self < 100
"#{tens[self - (self % 10)]} #{(self % 10).in_words}"
elsif self < 1_000
"#{(self / 100).in_words} hundred #{(self % 100).in_words}"
else
thousands_and_up.each do |number, word|
if (self / number) >= 1 && (self / number) < 1_000
return "#{(self / number).in_words} #{word} #{(self % number).in_words}"
end
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment