数字到字符串 - 如何将150变成“一百五十”

时间:2011-07-08 14:05:30

标签: string algorithm numbers

只是想知道是否有任何库可以轻松地将数字转换为javascript,jquery,php,python等中的字符串表示...

例如:我需要将1,210变成“一千零二十”。

此程序是否有名称?

2 个答案:

答案 0 :(得分:2)

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

如果您需要它们,只需将这些数组模板更改为“上限”形式。

答案 1 :(得分:0)

听起来像pynum2word可以提供帮助:http://sourceforge.net/projects/pynum2word/

具体来说,是to_cardinal方法。

其他语言,我会寻找“数字到单词”