How to convert an integer into its written‑out English words in Ruby

1 Answer

0 votes
below20 = [
  "", "one", "two", "three", "four", "five", "six", "seven",
  "eight", "nine", "ten", "eleven", "twelve", "thirteen",
  "fourteen", "fifteen", "sixteen", "seventeen", "eighteen",
  "nineteen"
]

tens = [
  "", "", "twenty", "thirty", "forty", "fifty",
  "sixty", "seventy", "eighty", "ninety"
]

def set_below_20_and_tens(num, below20, tens)
  return "" if num == 0

  if num < 20
    "#{below20[num]} "
  elsif num < 100
    "#{tens[num / 10]} " + set_below_20_and_tens(num % 10, below20, tens)
  else
    "#{below20[num / 100]} hundred " + set_below_20_and_tens(num % 100, below20, tens)
  end
end

def number_to_words(num, below20, tens)
  return "zero" if num == 0

  result = ""

  if num >= 1_000_000_000
    result << set_below_20_and_tens(num / 1_000_000_000, below20, tens) + "billion "
    num %= 1_000_000_000
  end

  if num >= 1_000_000
    result << set_below_20_and_tens(num / 1_000_000, below20, tens) + "million "
    num %= 1_000_000
  end

  if num >= 1000
    result << set_below_20_and_tens(num / 1000, below20, tens) + "thousand "
    num %= 1000
  end

  if num > 0
    result << set_below_20_and_tens(num, below20, tens)
  end

  result.strip
end

n = 176_283

puts number_to_words(n, below20, tens)



=begin
run:

one hundred seventy six thousand two hundred eighty three

=end

 



answered May 5 by avibootz
...