Update persian number file.

This commit is contained in:
mustafa-rezae 2025-05-08 18:06:30 +03:30
parent 0a643930b1
commit 8e16921f27

View File

@ -1,380 +1,384 @@
const oneDigit = [ export default defineNuxtPlugin(() => {
"صفر", console.info("persina number plugin");
"یک", });
"دو",
"سه",
"چهار",
"پنج",
"شش",
"هفت",
"هشت",
"نه",
];
const twoDigits = {
10: "ده",
11: "یازده",
12: "دوازده",
13: "سیزده",
14: "چهارده",
15: "پانزده",
16: "شانزده",
17: "هفده",
18: "هجده",
19: "نوزده",
20: "بیست",
30: "سی",
40: "چهل",
50: "پنجاه",
60: "شصت",
70: "هفتاد",
80: "هشتاد",
90: "نود",
};
const threeDigits = {
100: "صد",
200: "دویست",
300: "سیصد",
400: "چهارصد",
500: "پانصد",
600: "شش صد",
700: "هفت صد",
800: "هشت صد",
900: "نه صد",
};
const types = ["تلیارد", "میلیارد", "میلیون", "هزار", ""]; // const oneDigit = [
const decimalTypes = ["دهم", "صدم", "هزارم", "ده هزارم"]; // "صفر",
let numbers = []; // "یک",
let decimals = []; // "دو",
// "سه",
// "چهار",
// "پنج",
// "شش",
// "هفت",
// "هشت",
// "نه",
// ];
// const twoDigits = {
// 10: "ده",
// 11: "یازده",
// 12: "دوازده",
// 13: "سیزده",
// 14: "چهارده",
// 15: "پانزده",
// 16: "شانزده",
// 17: "هفده",
// 18: "هجده",
// 19: "نوزده",
// 20: "بیست",
// 30: "سی",
// 40: "چهل",
// 50: "پنجاه",
// 60: "شصت",
// 70: "هفتاد",
// 80: "هشتاد",
// 90: "نود",
// };
// const threeDigits = {
// 100: "صد",
// 200: "دویست",
// 300: "سیصد",
// 400: "چهارصد",
// 500: "پانصد",
// 600: "شش صد",
// 700: "هفت صد",
// 800: "هشت صد",
// 900: "نه صد",
// };
//Convert Number To Words // const types = ["تلیارد", "میلیارد", "میلیون", "هزار", ""];
const convert = (number) => { // const decimalTypes = ["دهم", "صدم", "هزارم", "ده هزارم"];
let negative = ""; // let numbers = [];
let decNumber = ""; // let decimals = [];
let decimal = "";
let percent = "";
if (isPercent(number)) { // //Convert Number To Words
number = number.replace("%", ""); // const convert = (number) => {
percent = " درصد"; // let negative = "";
} // let decNumber = "";
// let decimal = "";
// let percent = "";
number = getString(number); // if (isPercent(number)) {
if (number == "") return ""; // number = number.replace("%", "");
sliceNumber(number); // percent = " درصد";
if (isNegative(number)) negative = "منفی "; // }
number = number.replace("-", "");
if (isDecimal(number)) { // number = getString(number);
let index = number.indexOf("."); // if (number == "") return "";
let decNumberStr = ""; // sliceNumber(number);
// if (isNegative(number)) negative = "منفی ";
// number = number.replace("-", "");
decNumber = number.substr(index + 1, number.length); // if (isDecimal(number)) {
number = number.substr(0, index); // let index = number.indexOf(".");
decNumberStr = parseInt(decNumber).toString(); // let decNumberStr = "";
if (decNumberStr.length === 1 && decNumberStr != "0") { // decNumber = number.substr(index + 1, number.length);
decimal += oneDigit[decNumberStr] + " "; // number = number.substr(0, index);
decimal += decimalTypes[decNumber.length - 1]; // decNumberStr = parseInt(decNumber).toString();
} else {
decimal = calculateDigits(decimals);
decimal += " " + decimalTypes[decNumber.length - 1];
}
}
if (number.length === 1) { // if (decNumberStr.length === 1 && decNumberStr != "0") {
if (!decimal) { // decimal += oneDigit[decNumberStr] + " ";
return negative + oneDigit[number] + percent; // decimal += decimalTypes[decNumber.length - 1];
} // } else {
// decimal = calculateDigits(decimals);
// decimal += " " + decimalTypes[decNumber.length - 1];
// }
// }
if (number == "0") { // if (number.length === 1) {
return negative + decimal + percent; // if (!decimal) {
} // return negative + oneDigit[number] + percent;
// }
return negative + oneDigit[number] + " ممیز " + decimal + percent; // if (number == "0") {
} // return negative + decimal + percent;
// }
if (!decimal) { // return negative + oneDigit[number] + " ممیز " + decimal + percent;
return negative + calculateDigits(numbers) + percent; // }
}
return negative + calculateDigits(numbers) + " ممیز " + decimal + percent; // if (!decimal) {
}; // return negative + calculateDigits(numbers) + percent;
// }
//split number 3 by 3 with a separator (123456789.3025=>123,456,789.3,025) Do Not Give It Persian Numbers // return negative + calculateDigits(numbers) + " ممیز " + decimal + percent;
const sliceNumber = (number, separator = ",") => { // };
let percent = "";
let neg = "";
let dNum = "";
let n = "";
let d = "";
if (isPercent(number)) { // //split number 3 by 3 with a separator (123456789.3025=>123,456,789.3,025) Do Not Give It Persian Numbers
number = number.replace("%", ""); // const sliceNumber = (number, separator = ",") => {
percent = "%"; // let percent = "";
} // let neg = "";
// let dNum = "";
// let n = "";
// let d = "";
number = getString(number); // if (isPercent(number)) {
// number = number.replace("%", "");
// percent = "%";
// }
if (number == "") return ""; // number = getString(number);
if (isNegative(number)) neg = "-";
number = number.replace("-", ""); // if (number == "") return "";
// if (isNegative(number)) neg = "-";
if (isDecimal(number)) { // number = number.replace("-", "");
let index = number.indexOf(".");
dNum = number.substr(index + 1, number.length);
number = number.substr(0, index);
}
n = putSeparator(number, separator); // if (isDecimal(number)) {
numbers = n.split(separator); // let index = number.indexOf(".");
// dNum = number.substr(index + 1, number.length);
// number = number.substr(0, index);
// }
if (!dNum) return neg + n + percent; // n = putSeparator(number, separator);
// numbers = n.split(separator);
d = putSeparator(dNum, separator); // if (!dNum) return neg + n + percent;
decimals = d.split(separator);
return neg + n + "." + d + percent; // d = putSeparator(dNum, separator);
}; // decimals = d.split(separator);
//Puts a separator between the chunks of the given numString. // return neg + n + "." + d + percent;
const putSeparator = (numString, separator = ",") => { // };
if (typeof numString !== "string") return "";
if (numString.length < 4) return numString;
let result = ""; // //Puts a separator between the chunks of the given numString.
for (let i = numString.length - 1, counter = 0; i >= 0; i--) { // const putSeparator = (numString, separator = ",") => {
if (counter == 3) { // if (typeof numString !== "string") return "";
result += separator; // if (numString.length < 4) return numString;
counter = 0;
}
result += numString[i];
counter++;
}
result = result.split("").reverse().join(""); // let result = "";
return result; // for (let i = numString.length - 1, counter = 0; i >= 0; i--) {
}; // if (counter == 3) {
// result += separator;
// counter = 0;
// }
// result += numString[i];
// counter++;
// }
//Processing on Digits of A Number // result = result.split("").reverse().join("");
const calculateDigits = (arrNum) => { // return result;
let result = ""; // };
for (let i = 0; i < arrNum.length; i++) {
let parsedNum = parseInt(arrNum[i]);
let number = parsedNum;
let sadgan = Math.floor(number / 100) * 100;
number = number % 100;
let dahgan = Math.floor(number / 10) * 10;
let yekan = number % 10;
result += i !== 0 && parsedNum ? " و " : "";
result += // //Processing on Digits of A Number
getPersian(sadgan, dahgan, yekan, i, arrNum) + " " + getType(i, arrNum); // const calculateDigits = (arrNum) => {
} // let result = "";
// for (let i = 0; i < arrNum.length; i++) {
// let parsedNum = parseInt(arrNum[i]);
// let number = parsedNum;
// let sadgan = Math.floor(number / 100) * 100;
// number = number % 100;
// let dahgan = Math.floor(number / 10) * 10;
// let yekan = number % 10;
// result += i !== 0 && parsedNum ? " و " : "";
return result.trim(); // result +=
}; // getPersian(sadgan, dahgan, yekan, i, arrNum) + " " + getType(i, arrNum);
// }
//Main Process That Turn a Number Into a String(122=>100+20+2) // return result.trim();
const getPersian = (sadgan, dahgan, yekan, index, numbers) => { // };
let flag = false;
let result = "";
let dahganPlusYekan = dahgan + yekan;
if (threeDigits[sadgan]) { // //Main Process That Turn a Number Into a String(122=>100+20+2)
result += // const getPersian = (sadgan, dahgan, yekan, index, numbers) => {
yekan > 0 || dahgan > 0 // let flag = false;
? threeDigits[sadgan] + " و " // let result = "";
: threeDigits[sadgan]; // let dahganPlusYekan = dahgan + yekan;
}
if (twoDigits[dahganPlusYekan]) { // if (threeDigits[sadgan]) {
result += twoDigits[dahganPlusYekan] + " "; // result +=
return result; // yekan > 0 || dahgan > 0
} // ? threeDigits[sadgan] + " و "
// : threeDigits[sadgan];
// }
if (twoDigits[dahgan]) { // if (twoDigits[dahganPlusYekan]) {
result += twoDigits[dahgan] + " و "; // result += twoDigits[dahganPlusYekan] + " ";
} // return result;
// }
if ( // if (twoDigits[dahgan]) {
numbers.length === 2 && // result += twoDigits[dahgan] + " و ";
index === 0 && // }
yekan === 1 &&
dahgan === 0 &&
sadgan === 0
) {
return result;
}
if ( // if (
numbers.length > 2 && // numbers.length === 2 &&
index === numbers.length - 2 && // index === 0 &&
yekan === 1 && // yekan === 1 &&
dahgan === 0 && // dahgan === 0 &&
sadgan === 0 // sadgan === 0
) { // ) {
return result; // return result;
} // }
if (yekan > 0) result += oneDigit[yekan] + " "; // if (
// numbers.length > 2 &&
// index === numbers.length - 2 &&
// yekan === 1 &&
// dahgan === 0 &&
// sadgan === 0
// ) {
// return result;
// }
return result; // if (yekan > 0) result += oneDigit[yekan] + " ";
};
//getting The Type Of Each Number (Billion, Million,...) // return result;
const getType = (i, numbers) => { // };
let parsedNum = parseInt(numbers[i]);
if (isNaN(parsedNum)) return "";
if (!parsedNum) return "";
let length = numbers.length - i;
let index = types.length - length;
return types[index];
};
//Calculate if number:String is Negative Or Not // //getting The Type Of Each Number (Billion, Million,...)
const isNegative = (number) => { // const getType = (i, numbers) => {
number = getString(number); // let parsedNum = parseInt(numbers[i]);
if (!number) return false; // if (isNaN(parsedNum)) return "";
if (number[0] != "-") return false; // if (!parsedNum) return "";
number = number.replace("-", ""); // let length = numbers.length - i;
return number != "0"; // let index = types.length - length;
}; // return types[index];
// };
//Calculate if number:String has '%' as Percent // //Calculate if number:String is Negative Or Not
const isPercent = (string) => { // const isNegative = (number) => {
if (typeof string !== "string") return false; // number = getString(number);
let index = string.indexOf("%"); // if (!number) return false;
let lIndex = string.lastIndexOf("%"); // if (number[0] != "-") return false;
if (index != lIndex) return false; // number = number.replace("-", "");
return index > 0; // return number != "0";
}; // };
//is number:String:Number is a Valid Number? if type is Number turn it to String And Return it // //Calculate if number:String has '%' as Percent
const getString = (number) => { // const isPercent = (string) => {
if (number === undefined) return ""; // if (typeof string !== "string") return false;
if (number === null) return ""; // let index = string.indexOf("%");
if (isNaN(number)) return ""; // let lIndex = string.lastIndexOf("%");
if (typeof number === "number") return number.toString(); // if (index != lIndex) return false;
return number.trim(); // return index > 0;
}; // };
//Calculate if number:String has Decimal Point Or Not // //is number:String:Number is a Valid Number? if type is Number turn it to String And Return it
const isDecimal = (number) => { // const getString = (number) => {
number = getString(number); // if (number === undefined) return "";
if (number == "") return false; // if (number === null) return "";
let index = number.indexOf("."); // if (isNaN(number)) return "";
let lIndex = number.lastIndexOf("."); // if (typeof number === "number") return number.toString();
if (index != lIndex) return false; // return number.trim();
return index > 0; // };
};
//Convert English Numbers To Persian Numbers
const convertEnToPe = (number) => {
if (number == null || number == undefined) return "";
if (typeof number == "number") number = number.toString();
let res = "";
for (let i = 0; i < number.length; i++) {
switch (number[i]) {
case "\u0030":
res += "\u06F0";
break;
case "\u0031":
res += "\u06F1";
break;
case "\u0032":
res += "\u06F2";
break;
case "\u0033":
res += "\u06F3";
break;
case "\u0034":
res += "\u06F4";
break;
case "\u0035":
res += "\u06F5";
break;
case "\u0036":
res += "\u06F6";
break;
case "\u0037":
res += "\u06F7";
break;
case "\u0038":
res += "\u06F8";
break;
case "\u0039":
res += "\u06F9";
break;
default:
res += number[i];
}
}
return res;
};
//Convert Persian Numbers To English Numbers
const convertPeToEn = (number) => {
if (number == null || number == undefined) return "";
let res = "";
for (let i = 0; i < number.length; i++) {
switch (number[i]) {
case "\u06F0":
res += "\u0030";
break;
case "\u06F1":
res += "\u0031";
break;
case "\u06F2":
res += "\u0032";
break;
case "\u06F3":
res += "\u0033";
break;
case "\u06F4":
res += "\u0034";
break;
case "\u06F5":
res += "\u0035";
break;
case "\u06F6":
res += "\u0036";
break;
case "\u06F7":
res += "\u0037";
break;
case "\u06F8":
res += "\u0038";
break;
case "\u06F9":
res += "\u0039";
break;
default:
res += number[i];
}
}
return res;
};
const e2p = (s) => s.replace(/\d/g, (d) => "۰۱۲۳۴۵۶۷۸۹"[d]); // //Calculate if number:String has Decimal Point Or Not
const e2a = (s) => s.replace(/\d/g, (d) => "٠١٢٣٤٥٦٧٨٩"[d]); // const isDecimal = (number) => {
// number = getString(number);
// if (number == "") return false;
// let index = number.indexOf(".");
// let lIndex = number.lastIndexOf(".");
// if (index != lIndex) return false;
// return index > 0;
// };
// //Convert English Numbers To Persian Numbers
// const convertEnToPe = (number) => {
// if (number == null || number == undefined) return "";
// if (typeof number == "number") number = number.toString();
// let res = "";
// for (let i = 0; i < number.length; i++) {
// switch (number[i]) {
// case "\u0030":
// res += "\u06F0";
// break;
// case "\u0031":
// res += "\u06F1";
// break;
// case "\u0032":
// res += "\u06F2";
// break;
// case "\u0033":
// res += "\u06F3";
// break;
// case "\u0034":
// res += "\u06F4";
// break;
// case "\u0035":
// res += "\u06F5";
// break;
// case "\u0036":
// res += "\u06F6";
// break;
// case "\u0037":
// res += "\u06F7";
// break;
// case "\u0038":
// res += "\u06F8";
// break;
// case "\u0039":
// res += "\u06F9";
// break;
// default:
// res += number[i];
// }
// }
// return res;
// };
// //Convert Persian Numbers To English Numbers
// const convertPeToEn = (number) => {
// if (number == null || number == undefined) return "";
// let res = "";
// for (let i = 0; i < number.length; i++) {
// switch (number[i]) {
// case "\u06F0":
// res += "\u0030";
// break;
// case "\u06F1":
// res += "\u0031";
// break;
// case "\u06F2":
// res += "\u0032";
// break;
// case "\u06F3":
// res += "\u0033";
// break;
// case "\u06F4":
// res += "\u0034";
// break;
// case "\u06F5":
// res += "\u0035";
// break;
// case "\u06F6":
// res += "\u0036";
// break;
// case "\u06F7":
// res += "\u0037";
// break;
// case "\u06F8":
// res += "\u0038";
// break;
// case "\u06F9":
// res += "\u0039";
// break;
// default:
// res += number[i];
// }
// }
// return res;
// };
const p2e = (s) => s.replace(/[۰-۹]/g, (d) => "۰۱۲۳۴۵۶۷۸۹".indexOf(d)); // const e2p = (s) => s.replace(/\d/g, (d) => "۰۱۲۳۴۵۶۷۸۹"[d]);
const a2e = (s) => s.replace(/[٠-٩]/g, (d) => "٠١٢٣٤٥٦٧٨٩".indexOf(d)); // const e2a = (s) => s.replace(/\d/g, (d) => "٠١٢٣٤٥٦٧٨٩"[d]);
const p2a = (s) => // const p2e = (s) => s.replace(/[۰-۹]/g, (d) => "۰۱۲۳۴۵۶۷۸۹".indexOf(d));
s.replace(/[۰-۹]/g, (d) => "٠١٢٣٤٥٦٧٨٩"["۰۱۲۳۴۵۶۷۸۹".indexOf(d)]); // const a2e = (s) => s.replace(/[٠-٩]/g, (d) => "٠١٢٣٤٥٦٧٨٩".indexOf(d));
const a2p = (s) =>
s.replace(/[٠-٩]/g, (d) => "۰۱۲۳۴۵۶۷۸۹"["٠١٢٣٤٥٦٧٨٩".indexOf(d)]);
export { // const p2a = (s) =>
convert, // s.replace(/[۰-۹]/g, (d) => "٠١٢٣٤٥٦٧٨٩"["۰۱۲۳۴۵۶۷۸۹".indexOf(d)]);
sliceNumber, // const a2p = (s) =>
convertEnToPe, // s.replace(/[٠-٩]/g, (d) => "۰۱۲۳۴۵۶۷۸۹"["٠١٢٣٤٥٦٧٨٩".indexOf(d)]);
convertPeToEn,
e2p, // export {
e2a, // convert,
p2e, // sliceNumber,
a2e, // convertEnToPe,
p2a, // convertPeToEn,
a2p, // e2p,
}; // e2a,
// p2e,
// a2e,
// p2a,
// a2p,
// };