在JavaScript中将数字转换为阿拉伯字母
问题描述:
下面是我的代码,当我尝试转换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))
答
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
我更新了我的答案,但请记住,当你用英语数数时,你说**一百二十**和阿拉伯语,它将是**واحدمائةوعشرون** –
是否可以用几句话来描述预期行为?它很难理解代码而不知道它应该做什么。 –
120 - >مائةوعشرون بدلامن واحدمائةعشرون – Emy
هكذا不存在于您的代码中,它将如何得到结果? – kpie