I wrote a script that will convert a number to english (1 => "one", 34 => "thirty-four", etc.) ($string_utils:english_number() for MOO people) but for some reason it breaks out of a loop like:
for (n = 1; n <= 10; n++) {
world.note(english_number(n));
}
It just does "one" and stops. I even put "world.note("Blah");" right after it and it displays:
one
Blah
what's going on?
-------------
function english_number(num) {
if (num == 0)
return "zero";
var labels = new Array("", " thousand", " million", " billion", " trillion", " quadrillion", " quintillion", " sextillion", " septillion", " octillion", " nonillion", " decillion");
var numstr = "";
var mod = Math.abs(num);
for (n = 0; n < labels.length; n++) {
var div = mod % 1000;
if (div != 0) {
var hun = Math.floor(div / 100);
var ten = Math.floor(div % 100);
var outstr = english_tens(ten) + labels[n];
if (hun != 0)
outstr = english_ones(hun) + " hundred" + (ten != 0 ? " " : "") + outstr;
if (numstr != "")
numstr = outstr + " " + numstr;
else
numstr = outstr;
}
mod = Math.floor(mod / 1000);
}
return (num < 0 ? "negative " : "") + numstr;
}
function english_tens(num) {
var teens = new Array("ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen");
var others = new Array("twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety");
if (num < 10)
return english_ones(num);
else if (num < 20)
return teens[num - 10];
else
return others[Math.floor(num / 10) - 2] + (num % 10 != 0 ? "-" : "") + english_ones(num % 10);
}
function english_ones(num) {
var ones = new Array("", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine");
return ones[num];
} |