>将数字(从 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 ==> الحادية والعشرون
阿拉伯序号 | <样式><样式><样式>|||
---|---|---|---|
英语序数 | 阿拉伯序数 | 阿拉伯序数 | |
N° | 男性 | 女性 | |
1st | الأول | الأولى | |
2nd | style="text-align: center;">second | الثاني | الثانية |
3rd | الثالث | الثالثة | |
第 4 <</td> | الرابع | الرابعة | |
5th | style="text-align: center;">fifth | الخامس | الخامسة |
6th | style="text-align: center;">Sixth | السادس | السادسة |
7th | السابع | السابعة | |
第 8 | 第八 | الثامن | الثامنة |
9th | التاسع | التاسعة | |
10th<</td>td | العاشر | العاشرة | |
11th | style="text-align: center;">El1th | الحادي عشر | الحادية عشرة |
12th | style="text-align: center;">Twelfth | الثاني عشر | الثانية عشرة |
13th | الثالث عشر | الثالثة عشرة | |
14th | style="text-align: center;">Fourth | الرابع عشر | الرابعة عشرة |
15th | الخامس عشر | الخامسة عشرة | |
16th | السادس عشر | السادسة عشرة | |
17th | السابع عشر | السابعة عشرة | |
18th | style="text-align: center;">Eightecenteth | الثامن عشر | الثامنة عشرة |
19th | style="text-align: center;">Nineth | التاسع عشر | التاسعة عشرة |
20th | العشرون | العشرون | |
21st<</td>td | style="text-align: center;">Twenty-1الحادي والعشرون | الحادية والعشرون | |
22nd<</td>td | style="text-align: center;">Twenty-secondالثاني والعشرون | الثانية والعشرون | |
23rd | style="text-align: center;">Twenty-Third | الثالث والعشرون | الثالثة والعشرون |
24th | الرابع والعشرون | الرابعة والعشرون | |
....<</td>td | ............. | ............. | |
29th | التاسع والعشرون | التاسعة والعشرون | |
30th | الثلاثون | الثلاثون | |
....<</td>td | ............. | ............. | |
40th | الأربعون | الأربعون | |
....<</td>td | ............. | ............. | |
99th | style="text-align: center;">Ninety-9nth | التاسع والتسعون | التاسعة والتسعون |
查看 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) );
}