2015-04-02 56 views
1

我已将此代码从Stackoverflow中修改并进行了修改,但我无法将数字转换为超过3位数字。将数字转换为单词

下面是代码:

var num = this.rawValue; 
var a = ['','one ','two ','three ','four ', 'five ','six ','seven ','eight ','nine ','ten ','eleven ','twelve ', 'thirteen ','fourteen ','fifteen ','sixteen ','seventeen ','eighteen ','nineteen ']; 
var b = ['', '', 'twenty','thirty','forty','fifty', 'sixty','seventy','eighty','ninety']; 
var c = ['thousand', 'million', '']; 

num = num.toString(); 

num = ('000000000' + num).substr(-9); // // Make number into a predictiable nine character string 
num = num.match(/.{3}/g); // Split string into chuncks of three numbers then reverse order of returned array 

var words = ''; 

for(var i = 0; i < c.length; i++) { 

    var n = num[i]; 
    var str = ''; 
    str += (words != '') ? ' ' + c[i] + ' ' : ''; 
    str += (n[0] != 0) ? (a[Number(n[0])] + 'hundred ') : ''; 
    n = n.substr(1); 
    str += (n != 0) ? ((str != '') ? 'and ' : '') + (a[Number(n)] || b[n[0]] + ' ' + a[n[1]]) : ''; 
    words += str; 

} 

data.Text.TextField1.rawValue= words; 

我想数字转换成文字超过3个位数,也考虑十进制值。

当前的代码转换成千位,它将小数点前的值解释为未定义。上面的代码是在Adobe下使用Adobe的形式(SAP)。

回答

0

for循环中用c[c.length-1-i]代替c[i]。这对我有用。我刚刚发现为数组c指定的索引给出了错误的结果,因为它有点偏离了错误的方向。

我相信这可以通过其他方式进行优化。

JSFiddle for testing and experimenting

+0

感谢Xufox的努力。我编辑了上面的代码以获取南亚语言格式的文字。 – sanny 2015-04-03 06:44:55

+0

嗨@sanny,如果这个答案最终解决了您的问题,可以考虑将其标记为_accepted_,以便社区可以更好地了解此解决方案是否有效。如果没有,请告诉我们。 – Xufox 2015-04-16 21:40:56