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

1 Answer

0 votes
object NumberToWords {

  private val below20: Vector[String] =
    Vector("", "one", "two", "three", "four", "five", "six", "seven",
      "eight", "nine", "ten", "eleven", "twelve", "thirteen",
      "fourteen", "fifteen", "sixteen", "seventeen", "eighteen",
      "nineteen")

  private val tens: Vector[String] =
    Vector("", "", "twenty", "thirty", "forty", "fifty",
      "sixty", "seventy", "eighty", "ninety")

  def setBelow20AndTens(num: Int): String = num match {
    case 0 => ""
    case n if n < 20 =>
      below20(n) + " "
    case n if n < 100 =>
      tens(n / 10) + " " + setBelow20AndTens(n % 10)
    case n =>
      below20(n / 100) + " hundred " + setBelow20AndTens(n % 100)
  }

  def numberToWords(num: Int): String = {
    if (num == 0) "zero"
    else {
      val parts =
        List(
          if (num >= 1000000000) Some(setBelow20AndTens(num / 1000000000) + "billion ") else None,
          if (num % 1000000000 >= 1000000) Some(setBelow20AndTens((num % 1000000000) / 1000000) + "million ") else None,
          if (num % 1000000 >= 1000) Some(setBelow20AndTens((num % 1000000) / 1000) + "thousand ") else None,
          if (num % 1000 > 0) Some(setBelow20AndTens(num % 1000)) else None
        ).flatten

      parts.mkString.trim
    }
  }

  def main(args: Array[String]): Unit = {
    val n = 176283

    println(numberToWords(n))
  }
}



/*
run:

one hundred seventy six thousand two hundred eighty three

*/

 



answered May 5 by avibootz
...