如何将数字(从 1 到 99)转换为等效的阿拉伯序号字符串



>将数字(从 1 到 99)转换为阿拉伯序数字符串

与英语序数不同,在英语序数中,序数由原始数字(数字形式)组成并添加后缀(即 1st、2nd、3rd、4th......),阿拉伯序数不能这样写,阿拉伯序数是全文表示

下表列出了选定的阿拉伯序号(从 1 到 99)。

如果主语是男性或女性,则阿拉伯序数会有所不同。

在StackOverflow上找不到Javascript函数或解决方案,可以将数字(从1到99的范围内)转换为等效的阿拉伯序数文本,同时考虑到主题的类型(男性或女性)。

此类函数的示例可以是:

ordinalsAr(5);
ordinalsAr(21);
// result ==> الخامس
// result ==> الحادي والعشرون
ordinalsAr(5, true);   // true flag for Feminine
ordinalsAr(21, true);  // true flag for Feminine
// result ==> الخامسة
// result ==> الحادية والعشرون
<样式><样式><样式>style="文本对齐:居中;">英语序数"文本对齐:居中;">序数style="text-align: center;">firststyle="text-align: center;">secondstyle="text-align: center;">Thirdtd style="text-align: center;">Fourstyle="text-align: center;">fifthstyle="text-align: center;">Sixthstyle="text-align: center;">Seventhstyle="text-align: center;">ninethstyle="text-align: center;">Tenthstyle="text-align: center;">El1thstyle="text-align: center;">Twelfthstyle="text-align: center;">Thirthstyle="text-align: center;">Fourthstyle="text-align: center;">15thstyle="text-align: center;">Sixteenthstyle="text-align: center;">Seventhstyle="text-align: center;">Eightecentethstyle="text-align: center;">Ninethstyle="text-align: center;">Twentithstyle="text-align: center;">Twenty-1style="text-align: center;">Twenty-secondstyle="text-align: center;">Twenty-Thirdstyle="text-align: center;">Twenty-4style="text-align: center;">..............style="text-align: center;">Twenty-ninestyle="text-align: center;">Thirtithstyle="text-align: center;">..............style="text-align: center;">Fortiethstyle="text-align: center;">..............style="text-align: center;">Ninety-9nth
阿拉伯序号
英语序数
阿拉伯序数阿拉伯序数
男性女性
1st
الأولالأولى
2ndالثانيالثانية
3rd
الثالثالثالثة
第 4 <</td>
الرابعالرابعة
5thالخامسالخامسة
6thالسادسالسادسة
7th
السابعالسابعة
第 8第八الثامنالثامنة
9th
التاسعالتاسعة
10th<</td>td
العاشرالعاشرة
11thالحادي عشرالحادية عشرة
12thالثاني عشرالثانية عشرة
13th
الثالث عشرالثالثة عشرة
14thالرابع عشرالرابعة عشرة
15th
الخامس عشرالخامسة عشرة
16th
السادس عشرالسادسة عشرة
17th
السابع عشرالسابعة عشرة
18thالثامن عشرالثامنة عشرة
19thالتاسع عشرالتاسعة عشرة
20th
العشرونالعشرون
21st<</td>tdالحادي والعشرونالحادية والعشرون
22nd<</td>tdالثاني والعشرونالثانية والعشرون
23rdالثالث والعشرونالثالثة والعشرون
24th
الرابع والعشرونالرابعة والعشرون
....<</td>td
..........................
29th
التاسع والعشرونالتاسعة والعشرون
30th
الثلاثونالثلاثون
....<</td>td
..........................
40th
الأربعونالأربعون
....<</td>td
..........................
99thالتاسع والتسعونالتاسعة والتسعون

查看 Alan Omar 的代码概念,将数字(从 1 到 99)转换为阿拉伯序号字符串的较短代码如下。

有关阿拉伯数字转换的更多信息可以在这里找到 阿拉伯数字

/*********************************************************************
* @function      : ordinalsAr(number [, isFeminine])
* @purpose       : Converts numbers from 1 to 99 to Arabic Ordinal String
* @version       : 1.00
* @author        : Mohsen Alyafei
* @date          : 27 Jan 2022
* @Licence       : MIT
* @param         : {number} Integer from 1 to 99
* @param         : [isFeminine] the subject's gender:
*                  false (default) --> Masculine subject (e.g. output الأول الثاني الثالث)
*                  true            --> Feminine subject  (e.g. output الأولى الثانية الثالثة)
* @returns       : {string} The ordinal Arabic Text.
**********************************************************************/

function ordinalsAr(num, isFeminine=false) {
num %= 100;                  // only handle the lowest 2 digits (1-99) ignore others
let    the = "ال",           // set this to "" if you don't want the output prefixed with letters "ال"
unit = num % 10,
ordinal= the + [,"أول","ثاني","ثالث","رابع","خامس","سادس","سابع","ثامن","تاسع","عاشر"]
[num === 10 ? num : unit],                       // letters for lower part of ordinal string
female = isFeminine ? "ة" : "",                                 // add letter "ة" if Feminine
ones = (unit === 1 ? the + "حادي" : ordinal) + female;        // special cases for 21, 31, 41, etc.
return num <11 ? ordinal + (isFeminine && num ===1 ? "ى" : female): // from 1 to 10
num <20 ? ones + " عشر" + female :                           // from 11 to 19
(unit ? ones + " و" : "") +                                  // else 20 to 99
"ال" +                                                       // always add "ال"
[,,"عشر","ثلاث","أربع","خمس","ست","سبع","ثمان","تسع"]       // letters for 20, 30, 40...
[ ~~(num / 10)] + "ون";
}
// *=======================================================

//=======================================
//             Test Cases
//=======================================
// List the ordinal numbers from 1 to 99
// in both Masculine and Feminine genders
//=======================================
for (let i=1; i<100; i++) {
console.log(i,"M:  "+ordinalsAr(i),
"F:  "+ordinalsAr(i,true) );
}

function ordinalsAr(num,isFeminine){
let feminineSuffix = "ة";
let specialNums = {
1:{
masculine: "الأول",
feminine: "الأولى"
},
10:{
masculine: "العاشر",
feminine: "العاشرة"
}
}

let lastDigits = {
10:"عشر",
20:"العشرون",
30:"الثلاثون",
40:"الأربعون",
50:"الخمسون",
60:"الستون",
70:"السبعون",
80:"الثمانون",
90:"التسعون",
// you have to add the rest here
}
let firstDigits = {
1:"الحادي",
2:"الثاني",
3:"الثالث",
4:"الرابع",
5:"الخامس",
6:"السادس",
7:"السابع",
8:"الثامن",
9:"التاسع",
}

if (specialNums[num])
return isFeminine ? specialNums[num]['feminine'] : specialNums[num]['masculine']
if(firstDigits[num])
return isFeminine ? firstDigits[num] + feminineSuffix : firstDigits[num]
if(lastDigits[num])
return lastDigits[num]

let firstDigit = num % 10;
let lastDigit = num - firstDigit

if (isFeminine) {
if(lastDigit < 20)
return firstDigits[firstDigit] + feminineSuffix + " " + lastDigits[lastDigit] + feminineSuffix
else
return firstDigits[firstDigit] + feminineSuffix + " و" + lastDigits[lastDigit]
}

else{
if(lastDigit < 20)
return firstDigits[firstDigit] + " " + lastDigits[lastDigit]

}
return firstDigits[firstDigit] + " و" + lastDigits[lastDigit]
}
console.log(ordinalsAr(1))
console.log(ordinalsAr(1,true))
console.log(ordinalsAr(10))
console.log(ordinalsAr(25,true))
console.log(ordinalsAr(35))
console.log(ordinalsAr(19))
console.log(ordinalsAr(19,true))
//===================================
//   Additional Test Cases
//===================================
// convert all numbers from 1 to 99
// in both male and female genders
//===================================
for (let i=1; i<100; i++) {
console.log(i,ordinalsAr(i),
ordinalsAr(i,true) );
}

最新更新