在JavaScript或JQuery中获取任何数字的书面版本?

时间:2014-03-02 00:17:19

标签: javascript jquery

我所拥有的是以下内容:

var numbers = new Array("one", "two", "three", ...);

使用此功能,我可以获取我喜欢的任何数字的文本版本(使用numbers[index + 1])。问题是,如果我想要23,456,789转换为文本,甚至22?我将不得不花费余生添加到这个数组中以解释添加的任何数字。

是否有标准的JS或JQuery函数可以为我提供任何数字的文本表示?理想情况下,我喜欢它们没有空格和符号(即22 =二十二,120 =一百二十)。

该应用程序适用于 this 小提琴示例。所述小提琴的详细解释可以在 this 我的其他帖子中找到。

目前,这个问题是真正拥有随处使用代码的最大障碍。

我可以使用类似的东西:

function numbers(a){
    var ones = new Array("one", "two", "three", ...);
    var tens = new Array("", "twenty", "thirty", ...);
}

然后将数字拆分并应用适当的文本。但是有一种更简单的现有方法吗?在我编写函数之前。

修改

我希望有一个简单的单行。最后,我需要的是独特的类,基于它们在列表中的数字位置,所以我有类似的东西...

function toNumber(a) {
    var numbers = new Array("zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine");

    var sNumber = a.toString();

    for (var i = 0, len = sNumber.length; i < len; i += 1) {
        $('p').append(numbers[sNumber[i]]);
    }
}

是否足够好。

1 个答案:

答案 0 :(得分:0)

var th = ['','thousand','million', 'billion','trillion'];
var dg = ['zero','one','two','three','four', 'five','six','seven','eight','nine']; 
var tn = ['ten','eleven','twelve','thirteen', 'fourteen','fifteen','sixteen', 'seventeen','eighteen','nineteen'];
var tw = ['twenty','thirty','forty','fifty', 'sixty','seventy','eighty','ninety']; 

function toWords(s)
    {  
        s = s.toString(); 
        s = s.replace(/[\, ]/g,''); 
        if (s != parseFloat(s)) return 'not a number'; 
        var x = s.indexOf('.'); 
        if (x == -1) x = s.length; 
        if (x > 15) return 'too big'; 
        var n = s.split(''); 
        var str = ''; 
        var sk = 0; 
        for (var i=0; i < x; i++) 
        {
            if ((x-i)%3==2) 
            {
                if (n[i] == '1') 
                {
                    str += tn[Number(n[i+1])] + ' '; 
                    i++; 
                    sk=1;
                }
                else if (n[i]!=0) 
                {
                    str += tw[n[i]-2] + ' ';
                    sk=1;
                }
            }
            else if (n[i]!=0) 
            {
                str += dg[n[i]] +' '; 
                if ((x-i)%3==0) str += 'hundred ';
                sk=1;
            }

            if ((x-i)%3==1)
            {
                if (sk) str += th[(x-i-1)/3] + ' ';
                sk=0;
            }
        }
        if (x != s.length)
        {
            var y = s.length; 
            str += 'point '; 
            for (var i=x+1; i<y; i++) str += dg[n[i]] +' ';
        }
        return str.replace(/\s+/g,' ');
    }