This takes any positive integer number (up to 10^66-1) and returns the English written format (in upper case) for that number. So 1 -> ONE, 666 -> SIX HUNDRED AND SIXTY SIX.
function inWords(num) {
var a = ["","ONE","TWO","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE","TEN","ELEVEN","TWELVE","THIRTEEN","FOURTEEN","FIFTEEN","SIXTEEN","SEVENTEEN","EIGHTEEN","NINETEEN "];
var b = ["","","TWENTY","THIRTY","FORTY","FIFTY","SIXTY","SEVENTY","EIGHTY","NINETY"];
var c = ["THOUSAND","MILLION","BILLION","TRILLION","QUADRILLION","QUINTILLION","SEXTILLION","SEPTILLION","OCTILLION","NONILLION","DECILLION","UNDECILLION","DUODECILLION",
"TREDECILLION","QUATTUORDECILLION","QUINDECILLION","SEXDECILLION","SEPTEN-DECILLION","OCTODECILLION","NOVEMDECILLION","VIGINTILLION"];
if (num==0) return "";
if (num<20) return a[num].trim();
if (num<100) return (b[Math.floor(num/10)] + " " + a[num%10]).trim();
if (num<1000) return (a[Math.floor(num/100)] + " HUNDRED" + (num%100&&num%100<100?" AND ":" ") + inWords(num%100)).trim();
for (var i=0; i<c.length; i++) {
var name = c[i];
var lower = Math.pow(10,3+i*3);
var upper = lower*1000;
var test = num%lower;
if (num<upper) return (inWords(Math.floor(num/lower)) + " " + name + (test&&test<100?" AND ":" ") + inWords(test)).trim();
}
throw "Too large for now";
}
Subscribe to:
Post Comments (Atom)
Blog Archive
- May 2019 (3)
- November 2015 (1)
- September 2015 (1)
- May 2014 (1)
- March 2014 (1)
- February 2014 (2)
- January 2014 (1)
- September 2013 (2)
- August 2013 (1)
- April 2013 (3)
- March 2013 (2)
- February 2013 (1)
- January 2013 (1)
- December 2011 (1)
- October 2011 (1)
- September 2011 (12)
- July 2011 (2)
- March 2011 (1)
- January 2010 (2)
- December 2009 (2)
- December 2008 (4)
- November 2008 (4)
- October 2006 (1)
- September 2006 (1)
- August 2006 (1)
- February 2006 (1)
- January 2006 (3)
I like the word "vigintillion". Glad I've never tried counting that high.
ReplyDelete