Web Hosting Talk







View Full Version : javascript: number into a textual representation


ACW
10-11-2004, 11:47 AM
I need to turn a dollar amount into a textual representation using javascript.

For example $10.00 would be "Ten dollars, 00 cents"; 9,999,999.99 would be "Nine million nine hundred ninety-nine thousand nine hundred ninety-nine dollars, 99 cents" - that is the largest number I need.

I have the code in VB but I don't know enough about javascript to convert it. I've also seen examples in PHP but none in javascript.

Help:bawling: !

AlexV
10-11-2004, 01:24 PM
Took me a bit of time (I am almost exclusively a Perl programmer), however this seems to work:<script language="javascript">
function printnumber (printnumber) {
if (printnumber > 99) {
firstnumber = printnumber.substr(0,1);
middlenumber = printnumber.substr(1,1);
lastnumber = printnumber.substr(2,1);
} else if (printnumber > 9) {
firstnumber = 0;
middlenumber = printnumber.substr(0,1);
lastnumber = printnumber.substr(1,1);
} else {
firstnumber = 0;
middlenumber = 0;
lastnumber = printnumber.substr(0,1);
}
if (firstnumber != 0) {
if (firstnumber == 9) {
document.write('nine');
} else if (firstnumber == 8) {
document.write('eight');
} else if (firstnumber == 7) {
document.write('seven');
} else if (firstnumber == 6) {
document.write('six');
} else if (firstnumber == 5) {
document.write('five');
} else if (firstnumber == 4) {
document.write('four');
} else if (firstnumber == 3) {
document.write('three');
} else if (firstnumber == 2) {
document.write('two');
} else if (firstnumber == 1) {
document.write('one');
}
document.write(' hundred ');
}
if (middlenumber != 0) {
if (middlenumber == 9) {
document.write('ninety-')
} else if (middlenumber == 8) {
document.write('eighty-');
} else if (middlenumber == 7) {
document.write('seventy-');
} else if (middlenumber == 6) {
document.write('sixty-');
} else if (middlenumber == 5) {
document.write('fifty-');
} else if (middlenumber == 4) {
document.write('fourty-');
} else if (middlenumber == 3) {
document.write('thirty-');
} else if (middlenumber == 2) {
document.write('twenty-');
} else if (middlenumber == 1) {
if (lastnumber == 9) {
document.write('nineteen');
} else if (lastnumber == 8) {
document.write('eighteen');
} else if (lastnumber == 7) {
document.write('seventeen');
} else if (lastnumber == 6) {
document.write('sixteen');
} else if (lastnumber == 5) {
document.write('fifteen');
} else if (lastnumber == 4) {
document.write('fourteen');
} else if (lastnumber == 3) {
document.write('thirteen');
} else if (lastnumber == 2) {
document.write('twelve');
} else if (lastnumber == 1) {
document.write('eleven');
} else {
document.write('ten');
}
}
}
if (middlenumber != 1) {
if (lastnumber == 9) {
document.write('nine');
} else if (lastnumber == 8) {
document.write('eight');
} else if (lastnumber == 7) {
document.write('seven');
} else if (lastnumber == 6) {
document.write('six');
} else if (lastnumber == 5) {
document.write('five');
} else if (lastnumber == 4) {
document.write('four');
} else if (lastnumber == 3) {
document.write('three');
} else if (lastnumber == 2) {
document.write('two');
} else if (lastnumber == 1) {
document.write('one');
}
}
}

number = '9,999,999.99';
numarray = number.split('.');
dollars = numarray[0].split(',');
if (dollars[2]) {
printnumber(dollars[0]);
document.write(' million ');
printnumber(dollars[1]);
document.write(' thousand ');
printnumber(dollars[2]);
} else if (dollars[1]) {
printnumber(dollars[0]);
document.write(' thousand ');
printnumber(dollars[1]);
} else {
printnumber(dollars[0]);
}
document.write(' dollars, ' + numarray[1] + ' cents')
</script>I'm sure I broke a few strict rules here and there, and there's probably a better way to do this.

ACW
10-11-2004, 03:19 PM
Thanks!

That was very useful. I made a few modifications to ensure that the input was always formatted with the commas and some other minor changes.

Here is the final code in case anyone is interested.

function printnumber (printnumber) {
var strTemp = '';

if (printnumber > 99) {
firstnumber = printnumber.substr(0,1);
middlenumber = printnumber.substr(1,1);
lastnumber = printnumber.substr(2,1);
} else if (printnumber > 9) {
firstnumber = 0;
middlenumber = printnumber.substr(0,1);
lastnumber = printnumber.substr(1,1);
} else {
firstnumber = 0;
middlenumber = 0;
lastnumber = printnumber.substr(0,1);
}
if (firstnumber != 0) {
if (firstnumber == 9) {
strTemp = 'nine';
} else if (firstnumber == 8) {
strTemp = 'eight';
} else if (firstnumber == 7) {
strTemp = 'seven';
} else if (firstnumber == 6) {
strTemp = 'six';
} else if (firstnumber == 5) {
strTemp = 'five';
} else if (firstnumber == 4) {
strTemp = 'four';
} else if (firstnumber == 3) {
strTemp = 'three';
} else if (firstnumber == 2) {
strTemp = 'two';
} else if (firstnumber == 1) {
strTemp = 'one';
}
strTemp = strTemp + ' hundred ';
}
if (middlenumber != 0) {
if (middlenumber == 9) {
strTemp = strTemp + 'ninety-';
} else if (middlenumber == 8) {
strTemp = strTemp + 'eighty-';
} else if (middlenumber == 7) {
strTemp = strTemp + 'seventy-';
} else if (middlenumber == 6) {
strTemp = strTemp + 'sixty-';
} else if (middlenumber == 5) {
strTemp = strTemp + 'fifty-';
} else if (middlenumber == 4) {
strTemp = strTemp + 'fourty-';
} else if (middlenumber == 3) {
strTemp = strTemp + 'thirty-';
} else if (middlenumber == 2) {
strTemp = strTemp + 'twenty-';
} else if (middlenumber == 1) {
if (lastnumber == 9) {
strTemp = strTemp + 'nineteen';
} else if (lastnumber == 8) {
strTemp = strTemp + 'eighteen';
} else if (lastnumber == 7) {
strTemp = strTemp + 'seventeen';
} else if (lastnumber == 6) {
strTemp = strTemp + 'sixteen';
} else if (lastnumber == 5) {
strTemp = strTemp + 'fifteen';
} else if (lastnumber == 4) {
strTemp = strTemp + 'fourteen';
} else if (lastnumber == 3) {
strTemp = strTemp + 'thirteen';
} else if (lastnumber == 2) {
strTemp = strTemp + 'twelve';
} else if (lastnumber == 1) {
strTemp = strTemp + 'eleven';
} else {
strTemp = strTemp + 'ten';
}
}
}
if (middlenumber != 1) {
if (lastnumber == 9) {
strTemp = strTemp + 'nine';
} else if (lastnumber == 8) {
strTemp = strTemp + 'eight';
} else if (lastnumber == 7) {
strTemp = strTemp + 'seven';
} else if (lastnumber == 6) {
strTemp = strTemp + 'six';
} else if (lastnumber == 5) {
strTemp = strTemp + 'five';
} else if (lastnumber == 4) {
strTemp = strTemp + 'four';
} else if (lastnumber == 3) {
strTemp = strTemp + 'three';
} else if (lastnumber == 2) {
strTemp = strTemp + 'two';
} else if (lastnumber == 1) {
strTemp = strTemp + 'one';
}
}

return strTemp;
}

function AmountInText(value)
{
var number = value;
var numarray = number.split('.');
numarray[0] = FormatValue(numarray[0]);
var dollars = numarray[0].split(',');
var strAmountInText = '';

if (dollars[2]) {
strAmountInText = strAmountInText + printnumber(dollars[0]);
strAmountInText = strAmountInText + ' million ';
strAmountInText = strAmountInText + printnumber(dollars[1]);
strAmountInText = strAmountInText + ' thousand ';
strAmountInText = strAmountInText + printnumber(dollars[2]);
} else if (dollars[1]) {
strAmountInText = strAmountInText + printnumber(dollars[0]);
strAmountInText = strAmountInText + ' thousand ';
strAmountInText = strAmountInText + printnumber(dollars[1]);
} else {
strAmountInText = strAmountInText + printnumber(dollars[0]);
}

if (!numarray[1]){numarray[1] = "00"}
if (strAmountInText == ''){strAmountInText = "zero"}

strAmountInText = strAmountInText + ' dollars, ' + numarray[1] + ' cents';

return strAmountInText;
}

function FormatValue(value)
{
var numarray = value.split('.');
var strValue = numarray[0]
var strTemp = '';

for (var i = 1; i <= strValue.length; i++) {
if (i == 4){
strTemp = ',' + strTemp;
} else if (i == 7){
strTemp = ',' + strTemp;
}

strTemp = Left(Right(strValue, i), 1) + strTemp;
}

return strTemp;
}

function Left(str, n){
if (n <= 0)
return "";
else if (n > String(str).length)
return str;
else
return String(str).substring(0,n);
}

function Right(str, n){
if (n <= 0)
return "";
else if (n > String(str).length)
return str;
else {
var iLen = String(str).length;
return String(str).substring(iLen, iLen - n);
}
}

alert(AmountInText('1999.95'));