Skip to content

Instantly share code, notes, and snippets.

@raelg
Last active July 1, 2016 12:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save raelg/f3006fd8e5e034081e3e to your computer and use it in GitHub Desktop.
Save raelg/f3006fd8e5e034081e3e to your computer and use it in GitHub Desktop.
Number to string
import scala.collection.immutable.TreeMap
val NUMBERS = TreeMap(
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"
)
val HUNDREDS = TreeMap(
100l -> "hundred", 1000l -> "thousand", 1000000l -> "million", 1000000000l -> "billion", 1000000000000l -> "trillion"
)
def numberToString(number: Long) : String = {
if (HUNDREDS.to(number).nonEmpty) {
val (h, hundreds) = HUNDREDS.to(number).last
val remainder = number % h
numberToString(number / h) + hundreds + {if (remainder > 0) {if (remainder < 100) " and " else ", "} + numberToString(remainder) else " "}
} else if (NUMBERS.to(number.toInt).nonEmpty) {
val (n, word) = NUMBERS.to(number.toInt).last
val remainder = number - n
word + {if (remainder > 0 && remainder < 10) "-" else " "} + numberToString(remainder)
} else {
""
}
}
numberToString(2147480648L)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment