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

1 Answer

0 votes
import Foundation

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

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

func setBelow20AndTens(_ num: Int) -> String {
    switch num {
    case 0:
        return ""
    case 1..<20:
        return below20[num] + " "
    case 20..<100:
        return tens[num / 10] + " " + setBelow20AndTens(num % 10)
    default:
        return below20[num / 100] + " hundred " + setBelow20AndTens(num % 100)
    }
}

func numberToWords(_ n: Int) -> String {
    if n == 0 { return "zero" }

    var num = n
    var result = ""

    if num >= 1_000_000_000 {
        result += setBelow20AndTens(num / 1_000_000_000) + "billion "
        num %= 1_000_000_000
    }
    if num >= 1_000_000 {
        result += setBelow20AndTens(num / 1_000_000) + "million "
        num %= 1_000_000
    }
    if num >= 1000 {
        result += setBelow20AndTens(num / 1000) + "thousand "
        num %= 1000
    }
    if num > 0 {
        result += setBelow20AndTens(num)
    }

    return result.trimmingCharacters(in: .whitespaces)
}

let n = 176_283

print(numberToWords(n))



/*
run:

one hundred seventy six thousand two hundred eighty three

*/

 



answered May 5 by avibootz
...