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) {
...