Just wondering if there are any libraries that can easily turn numbers into their string representations in javascript, jquery, php, python etc...
Ex: I need to turn 1,210 into "One Thousand Two Hundred and Ten".
Is there a name for this procedure?
Javascript Solution. Supports all integers from negative infinity to infinity:
var GetWord;
(function(){
GetWord = function (number) {//number must be an integer
return (function f(number){
var output = [];
var is_negative = number < 0;
number = Math.abs(number);
var chunks = [];
for (var x = count_names.length - 1, limit = 0; x >= limit; --x) {
var chunk = Math.floor(number / counts[x]);
if (chunk !== 0) {
output.push(GetWord(chunk) + " " + count_names[x]);
}
chunks[x] = chunk;
number -= chunk * counts[x];
}
if (number !== 0) {
if (number <= 19) {
output.push(number_names[number]);
} else {
var tens = Math.floor(number / 10);
number -= tens * 10;
if (number === 0) {
output.push(number_names2[tens - 2]);
} else {
output.push(number_names2[tens - 2] + " " + GetWord(number));
}
}
}
if (output.length > 2) {
for (var x = 0, limit = output.length - 1; x < limit; ++x) {
output[x] += ","
}
}
if (output.length > 1) {
var ubound = output.length - 1;
output[output.length] = output[ubound];
output[ubound] = "and";
}
if (is_negative) {
output.splice(0, 0, "negative");
}
return output;
})(number).join(" ");
};
var number_names = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"];
var number_names2 = ["twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety", "hundred"]
var count_names = ["hundred", "thousand", "million", "billion", "trillion", "quadrillion", "quintillion", "sextillion", "septillion", "octillion", "nonillion", "decillion", "undecillion", "duodecillion", "tredecillion", "quattuordecillion", "quindecillion", "sexdecillion", "septendecillion", "octodecillion", "novemdecillion", "vigintillion"];
var counts = [100];
for (var x = counts.length, limit = count_names.length; x < limit; ++x) {
counts.push(Math.pow(1000, x));
}
})();
Usage:
GetWord(1210);
gives one thousand, two hundred, and ten
GetWord(2147483647);
gives two billion, one hundred and forty seven million, four hundred and eighty three thousand, six hundred, and forty seven
GetWord(-123876124);
gives negative one hundred and twenty three million, eight hundred and seventy six thousand, one hundred, and twenty four
If you need them caps, simply change those array templates into the "capped" form.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With