Число в строку - Как превратить 150 в «Сто пятьдесят» - PullRequest
5 голосов
/ 08 июля 2011

Просто интересно, есть ли какие-нибудь библиотеки, которые могут легко превратить числа в их строковые представления в javascript, jquery, php, python и т. Д.и десять ".

Есть ли название для этой процедуры?

Ответы [ 2 ]

2 голосов
/ 08 июля 2011

Решение 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».

0 голосов
/ 08 июля 2011

Похоже, что pynum2word может помочь: http://sourceforge.net/projects/pynum2word/

В частности, метод to_cardinal.

На других языках я бы искал "числа в словах"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...