2017-08-05 91 views
0

下面是我的代碼,當我嘗試轉換23時,它轉換爲عشرينتلاته,但我希望它轉換爲ثلاثةوعشرونوهكذا。在JavaScript中將數字轉換爲阿拉伯字母

var th = ['', 'ألف', 'مليون', 'مليار', 'تريليون']; 
 
     var dg = ['صفر', 'واحد', 'اثنين', 'ثلاثة', 'أربعة', 'خمسة', 'ستة', 'سبعة', 'ثمانية', 'تسعة']; 
 
     var tn = ['عشرة', 'أحد عشر', 'اثني عشر', 'ثلاثة عشر', 'أربعة عشر', 'خمسة عشر', 'ستة عشر', 'سبعة عشر', 'ثمانية عشر', 'تسعة عشر']; 
 
     var tw = ['عشرون', 'ثلاثون', 'الأربعين', 'خمسين', 'ستين', 'السبعين', 'ثمانين', 'تسعين']; 
 

 
     function toWords(s) { 
 
      s = s.toString(); 
 
      s = s.replace(/[\, ]/g, ''); 
 
      if (s != parseFloat(s)) return 'لیس عدد'; 
 
      var x = s.indexOf('.'); 
 
      if (x == -1) x = s.length; 
 
      if (x > 15) return 'كبير جدا'; 
 
      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 += 'مائة '; 
 
        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 += 'نقطة '; 
 
       for (var i = x + 1; i < y; i++) str += dg[n[i]] + ' '; 
 
      } 
 
      return str.replace(/\s+/g, ' '); 
 
     } 
 
     
 
     
 
     
 
     console.log(toWords(23))

+0

是否可以用幾句話來描述預期行爲?它很難理解代碼而不知道它應該做什麼。 –

+0

120 - >مائةوعشرون بدلامن واحدمائةعشرون – Emy

+0

هكذا不存在於您的代碼中,它將如何得到結果? – kpie

回答

1

var th = ['', 'ألف', 'مليون', 'مليار', 'تريليون']; 
 
var dg = ['صفر', 'واحد', 'اثنين', 'ثلاثة', 'أربعة', 'خمسة', 'ستة', 'سبعة', 'ثمانية', 'تسعة']; 
 
var tn = ['عشرة', 'أحد عشر', 'اثني عشر', 'ثلاثة عشر', 'أربعة عشر', 'خمسة عشر', 'ستة عشر', 'سبعة عشر', 'ثمانية عشر', 'تسعة عشر']; 
 
var tw = ['عشرون', 'ثلاثون', 'الأربعين', 'خمسين', 'ستين', 'السبعين', 'ثمانين', 'تسعين']; 
 

 
//console.log(th); 
 
function toWords(s) { 
 
\t s = s.toString(); 
 
\t s = s.replace(/[\, ]/g,''); 
 
\t if (s != parseFloat(s)) return 'ليس رقم'; 
 
\t var x = s.indexOf('.'); 
 
\t if (x == -1) 
 
\t \t x = s.length; 
 
\t if (x > 15) 
 
\t \t return 'too big'; 
 
\t var n = s.split(''); 
 
\t var str = ''; 
 
\t var sk = 0; 
 
\t for (var i=0; i < x; i++) { 
 
\t \t if ((x-i)%3==2) { 
 
\t \t \t if (n[i] == '1') { 
 
\t \t \t \t str += tn[Number(n[i+1])] + ' '+ ' '; 
 
\t \t \t \t i++; 
 
\t \t \t \t sk=1; 
 
\t \t \t } else if (n[i]!=0) { 
 
\t \t \t \t str += tw[n[i]-2] + ' '; 
 
\t \t \t \t sk=1; 
 
\t \t \t } 
 
\t \t } else if (n[i]!=0) { // 0235 
 
\t \t \t str = dg[n[i]] + ' ' + str + ' '; 
 
\t \t \t if ((x-i)%3==0) str += 'مائة و '; 
 
\t \t \t sk=1; 
 
\t \t } 
 
\t \t if ((x-i)%3==1) { 
 
\t \t \t if (sk) 
 
\t \t \t \t str += th[(x-i-1)/3] + ' '; 
 
\t \t \t sk=0; 
 
\t \t } 
 
\t } 
 

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

 
console.log("23 : "+ toWords(23)); 
 
console.log("120: "+ toWords(120));

+0

你試過「120」嗎? – wahdan

+0

我更新了我的答案,但請記住,當你用英語數數時,你說**一百二十**和阿拉伯語,它將是**واحدمائةوعشرون** –