// num2word by JoeSimmons
var num2word = (function () {
'use strict';
var ones = {
'0' : 'zero', '1' : 'one', '2' : 'two', '3' : 'three',
'4' : 'four', '5' : 'five', '6' : 'six', '7' : 'seven',
'8' : 'eight', '9' : 'nine'
},
_10_19 = {
'10' : 'ten', '11' : 'eleven', '12' : 'twelve', '13' : 'thirteen',
'14' : 'fourteen', '15' : 'fifteen', '16' : 'sixteen',
'17' : 'seventeen', '18' : 'eighteen', '19' : 'nineteen'
},
tens = {
'2' : 'twenty', '3' : 'thirty', '4' : 'forty', '5' : 'fifty',
'6' : 'sixty', '7' : 'seventy', '8' : 'eighty', '9' : 'ninety'
};
return function (num) {
var word = '', char0, nstr, rest;
if ( isNaN( parseInt(num, 10) ) ) { return '(error - invalid argument)'; }
nstr = (num + '').split('.')[0].replace(/^0+(\d+)/, '$1'); // format the number and make it a string
num = parseInt(nstr, 10); // get a number, even if it's a string
rest = nstr.substring(1); // cache the characters past the first to be used later
char0 = nstr.charAt(0); // make an array of characters
if (num < 10) { // 0 - 9
word = ones[char0];
} else if (num < 20) { // 10 - 19
word = _10_19[nstr];
} else if (num < 100) { // 20 - 99
word = tens[char0] + '-' + num2word(rest);
} else if (num < 1000) { // 100 - 999
word = ones[char0] + ' hundred ' + num2word(rest);
} else if (num < 1000000) { // 1,000 - 999,999
word = num2word( nstr.slice(0, -3) ) + ' thousand ' + num2word( nstr.slice(-3) );
} else {
return '(error - number too large)';
}
return word.replace(/[ -]zero/g, '');
};
}());