JSFiddle - React, Tailwind, and code Playground

HTML

<input id="id" type="number" value="5"><br><div id="out"></div>

CSS

* {
    font-size: 20px;
    font-family: Gadugi, "Consolas", "Constantia", monospace;
}

JavaScript

(function (global) {
    'use strict';

    var scalePrefix = ['m', 'b', 'tr', 'quadr', 'quint', 
            'sext', 'sept', 'oct', 'non', 'dec'];

    var digits = ['', 'one', 'two', 'three', 'four',
            'five', 'six', 'seven', 'eight', 'nine'];

    var tens = ['', 'ten', 'twenty', 'thirty', 'forty', 'fifty',
            'sixty', 'seventy', 'eighty', 'ninety'];

    var teens = { 0: 'ten', 1: 'eleven', 2: 'twelve', 
            3: 'thir', 5: 'fif', 8: 'eigh' };

    function nameDigit(digit) {
        return digits[digit];
    }

    function nameTenToNineteen(number) {
        var prefix = teens[number] || digits[number];

        return number < 3 ? prefix : prefix + 'teen';
    }

    function nameTripletScale(digitCount) {
        return  digitCount < 3 ? '' :
                digitCount < 6 ? 'thousand' :
                scalePrefix[digitCount / 3 - 2] + 'illion';
    }

    function nameTripletHead(number) {
        return +number ? (nameDigit(number) + ' hundred') : '';
    }

    function nameTripletTail(digitPair) {
        var separator = +digitPair[1] ? '-' : '';

        return  digitPair[0] == 0 ? nameDigit(digitPair[1]) :
                digitPair[0] == 1 ? nameTenToNineteen(digitPair[1]) :
                tens[digitPair[0]] + separator + digits[digitPair[1]];
    }

    function extractSymbols(number) {
        var symbols, digitCount;

        number = ('' + number);
        if (!number.match(/^(-?)[\d,]+$/)) {
           throw new Error('invalid number: ' + number);
        }
        symbols = number.replace(/,/g, '').split('');
        digitCount = symbols.length - (symbols[0] == '-');
        if (digitCount / 3 > scalePrefix.length + 2) {
            throw new Error('number out of range: ' + number);
        }

        return symbols;
    }

    function nameNumber(number) {
        var symbols = extractSymbols(number),
            sign = '',
            segments = [],
            segment;

        function append(item) {
           ...