Решение Javascript. Поддерживает все целые числа от отрицательной бесконечности до бесконечности:
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));
}
})();
Использование:
GetWord(1210);
дает one thousand, two hundred, and ten
GetWord(2147483647);
дает two billion, one hundred and forty seven million, four hundred and eighty three thousand, six hundred, and forty seven
GetWord(-123876124);
дает negative one hundred and twenty three million, eight hundred and seventy six thousand, one hundred, and twenty four
Если вам нужны заглавные буквы, просто измените эти шаблоны массивов в форму «capped».