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

1 Answer

0 votes
package main

import (
    "fmt"
    "strings"
)

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

var tens = []string{
    "", "", "twenty", "thirty", "forty", "fifty",
    "sixty", "seventy", "eighty", "ninety",
}

func setBelow20AndTens(num int) string {
    if num == 0 {
        return ""
    } else if num < 20 {
        return below20[num] + " "
    } else if num < 100 {
        return tens[num/10] + " " + setBelow20AndTens(num%10)
    } else {
        return below20[num/100] + " hundred " + setBelow20AndTens(num%100)
    }
}

func numberToWords(num int) string {
    if num == 0 {
        return "zero"
    }

    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 strings.TrimSpace(result)
}

func main() {
    n := 176283
    
    fmt.Println(numberToWords(n))
}



/*
run:

one hundred seventy six thousand two hundred eighty three

*/

 



answered 5 days ago by avibootz
...