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

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"
];

function setBelow20AndTens(int $num) {
    global $below20, $tens;

    if ($num === 0) {
        return "";
    } elseif ($num < 20) {
        return $below20[$num] . " ";
    } elseif ($num < 100) {
        return $tens[intdiv($num, 10)] . " " . setBelow20AndTens($num % 10);
    } else {
        return $below20[intdiv($num, 100)] . " hundred " . setBelow20AndTens($num % 100);
    }
}

function numberToWords(int $num) {
    if ($num === 0) return "zero";

    $result = "";

    if ($num >= 1000000000) {
        $result .= setBelow20AndTens(intdiv($num, 1000000000)) . "billion ";
        $num %= 1000000000;
    }
    if ($num >= 1000000) {
        $result .= setBelow20AndTens(intdiv($num, 1000000)) . "million ";
        $num %= 1000000;
    }
    if ($num >= 1000) {
        $result .= setBelow20AndTens(intdiv($num, 1000)) . "thousand ";
        $num %= 1000;
    }
    if ($num > 0) {
        $result .= setBelow20AndTens($num);
    }

    return rtrim($result);
}

$n = 176283;

echo numberToWords($n) . PHP_EOL;



/*
run:

one hundred seventy six thousand two hundred eighty three

*/

 



answered May 5 by avibootz
...