using System.Collections.Generic;
public static void Main()
decimal MyNumber = 1397.7M;
int main_value = (int)MyNumber;
string mainText = "فقط " + Tafqit(main_value);
decimal q = Math.Floor(MyNumber);
string tempfrac = Decimal.Round(MyNumber, 2).ToString().Split('.')[1];
int frac_value = int.Parse(tempfrac);
if (tempfrac.Length == 1 || tempfrac.Length == 2 && tempfrac[1] == '0')
fracText = Tafqit(frac_value, CurrPart: "frac");
mainText += " و" + fracText + " لا غير.";
Console.WriteLine(mainText);
public static string Tafqit(int NumIn = 0, bool Feminine = false, bool Comma = false, bool SplitHund = false, bool Miah = true,
bool Billions = false, bool TextToFollow = false, bool AG = false, bool Legal = false, string CurrPart = "main")
string[] TableScales = { "", "ألف", "مليون", "مليار", "ترليون", "كوادرليون", "كوينتليون", "سكستليون" },
TableScalesP = { "", "آلاف", "ملايين", "مليارات" },
TableMale = { "", "واحد", "اثنان", "ثلاثة", "أربعة", "خمسة", "ستة", "سبعة", "ثمانية", "تسعة", "عشرة" },
TableFemale = { "", "واحدة", "اثنتان", "ثلاث", "أربع", "خمس", "ست", "سبع", "ثمان", "تسع", "عشر" };
Subject = new[] { "قرشا", "قرشان", "قروش", "قرشا" };
Subject = new[] { "جنيه", "جنيهان", "جنيهات", "جنيهاً" };
if (NumIn == 0) return "صفر";
string Scale, ScalePlural, NumberInWords = "";
bool IsLastEffTriplet = false;
bool IsAG = (AG == true);
string Taa = IsAG ? "تي" : "تا", Taan = IsAG ? "تين" : "تان";
string Aa = IsAG ? "ي" : "ا", Aan = IsAG ? "ين" : "ان";
string Ethna = IsAG ? "اثني" : "اثنا", Ethnata = IsAG ? "اثنتي" : "اثنتا";
string Ethnan = IsAG ? "اثنين" : "اثنان", Ethnatan = IsAG ? "اثنتين" : "اثنتان";
string Woon = IsAG ? "ين" : "ون";
var TableUnits = new string[TableMale.Length];
TableMale.CopyTo(TableUnits, 0);
var Table11_19 = new string[TableMale.Length];
TableMale.CopyTo(Table11_19, 0);
Table11_19[0] = TableFemale[10];
newNumIn = NumIn.ToString();
if (! (NumIn.ToString().Length * 2 % 3 == 0))
newNumIn = 0.ToString("D" + (NumIn.ToString().Length * 2 % 3)) + NumIn.ToString();
var NumLen = newNumIn.Length;
for (int digits = NumLen; digits > 0; digits -= 3)
Triplet = Convert.ToInt32(newNumIn.Substring(NumLen - digits, 3));
next_triplet_idx = NumLen - digits + 3;
if (next_triplet_idx < newNumIn.Length)
IsLastEffTriplet = Convert.ToInt32(newNumIn.Substring(next_triplet_idx)) == 0;
ScalePos = digits / 3 - 1;
Scale = TableScales[ScalePos];
ScalePlural = (ScalePos < 4 ? TableScalesP[ScalePos] : TableScales[ScalePos] + "ات");
if (Billions && ScalePos == 3)
NumberInWords += oneTripletToWords(Triplet, TableFemale, SplitHund, Miah, Scale, TextToFollow, Taa, Taan, Legal, IsLastEffTriplet,
TableUnits, Subject, Table11_19, ScalePlural, Woon, Aa, Aan);
if (!IsLastEffTriplet) NumberInWords += (Comma ? "،" : "") + SpWa;
int Num_99 = Triplet % 100;
string space = !IsLastEffTriplet ? "" : " ";
SubjectName = space + Subject[0];
if (Triplet > 10) SubjectName = space + Subject[3];
else if (Triplet > 2) SubjectName = space + Subject[2];
else if (Triplet > 0) SubjectName = Subject[Triplet - 1] + " " + TableUnits[Num_99];
return NumberInWords + SubjectName;
public static string oneTripletToWords(int Triplet, string[] TableFemale, bool SplitHund, bool Miah, string Scale, bool TextToFollow,
string Taa, string Taan, bool Legal, bool IsLastEffTriplet, string[] TableUnits, string[] Subject, string[] Table11_19, string ScalePlural,
string Woon, string Aa, string Aan)
int Num_99 = Triplet % 100,
Num_100 = ~~(Triplet / 100),
Num_Tens = ~~(Num_99 / 10);
string wordMiah = (Miah == true) ? "مئة" : "مائة";
string TanweenLetter = "ًا";
Word_100 = TableFemale[Num_100] + (SplitHund == true ? " " : "") + wordMiah;
Word_100 = wordMiah.Substring(0, wordMiah.Length - 1) + ((Scale != "" && Num_99 == 0) || TextToFollow ? Taa : Taan);
if (Num_99 > 19) Word_99 = TableUnits[Num_Unit] + (Num_Unit > 0 ? SpWa : "") +
(Num_Tens == 2 ? "عشر" : TableFemale[Num_Tens]) + Woon;
else if (Num_99 > 10) Word_99 = Table11_19[Num_99 - 10] + " " + Table11_19[0];
else if (Num_99 > 2 || Num_99 == 0 || Subject.Length==0) Word_99 = TableUnits[Num_99].ToString();
string Words999 = Word_100 + (Num_100 > 0 && Num_99 > 0 ? SpWa : "") + Word_99;
string legalTxt = (Legal && Num_99 < 3) ? " " + Scale : "";
string Word_100Wa = (Num_100 > 0 ? Word_100 + legalTxt + SpWa : "") + Scale;
(Num_99 > 10 ? Scale + (IsLastEffTriplet && TextToFollow ? "" : TanweenLetter)
if (Num_99 == 0) Words999 += " " + Scale;
else if (Num_99 == 1) Words999 = Word_100Wa;
else Words999 = Word_100Wa + (IsLastEffTriplet && TextToFollow ? Aa : Aan);