Preview:
//customized by Firas.Fatoum 6.4.2022

static TempStr numeralsToTxt_AR(real _num)
{
    real    numOfPennies = decround(frac(_num), 2);
    real    test         = _num - frac(_num);
    str     zero;
    str     comma;
    str     and;
    str     cent;
    int     numOfTenths;
    str 20  ones[19], tenths[9], hundreds, thousands, millions, billions, trillions;

    int64   temp;
    str 200  returntxt;

    real modOperator(real a1, real a2)
    {
    int     tmpi;
    real    tmp1, tmp2;
    tmp1 = a1 / a2;
    tmpi = real2int(tmp1);
    tmp2 = tmpi;
    return (tmp1 - tmp2)*a2;
    }

    str doubleDigit2ARTxt(real doubledigit,boolean _pennies = false)
    {
        str     txt;
        int     firstDigit;
        real    tempdigit;

        if(_pennies)
        {
            firstDigit = doubledigit * 10;
            doubledigit = doubledigit * 100;
            if(!firstDigit)
            {
                doubledigit = doubledigit  mod  10;
                //txt = zero + " " + ones[doubledigit];
                txt = ones[doubledigit];
                return txt;
            }
        }
        tempdigit = doubledigit;
        if (tempdigit >= 20)
        {
            tempdigit = tempdigit  div  10;
            txt = tenths[tempdigit];
            doubledigit = doubledigit  mod  10;
        }
        if (doubledigit >= 1)
        {
            txt = txt ?  (ones[doubledigit] + and + txt) : ones[doubledigit];
        }

        return txt;
    }

    real checkPower(real  _test,int64 _power)
    {
        int64   numOfPower;

        if (_test >= _power)
        {
            numOfPower = _test div _power;
            if (numOfPower >= 100)
            {
                temp = numOfPower div 100;

                if(temp > 9)// The validation was previously on 2
                {
                    returntxt = returntxt ? (returntxt + and + ones[temp] + ' ' + hundreds) :(returntxt + ' ' + ones[temp] + ' ' + hundreds);
                }

                else
                {
                    switch(temp)
                    {

                        Case 1:
                                returntxt = returntxt ? (returntxt + and + hundreds) : (returntxt + ' ' + hundreds);
                                break;
                        Case 2:
                                // TO DO need to insert a label for two hundred in Arabic
                                returntxt = returntxt ? (returntxt + and + "مائتين") :   returntxt + ' ' + "مائتين";
                                break;
                        Case 3:
                                // TO DO need to insert a label for three hundred in Arabic
                                returntxt = returntxt ? (returntxt + and + "ثلاثمائة") :   returntxt + ' ' + 'ثلاثمائة';
                                break;
                        Case 4:
                                // TO DO need to insert a label for four hundred in Arabic
                                returntxt = returntxt ? (returntxt + and + "اربعمائة") :   returntxt + ' ' + "اربعمائة";
                                break;
                        Case 5:
                                // TO DO need to insert a label for five hundred in Arabic
                                returntxt = returntxt ? (returntxt + and + "خمسمائة") :   returntxt + ' ' + "خمسمائة";
                                break;
                        Case 6:
                                // TO DO need to insert a label for six hundred in Arabic
                                returntxt = returntxt ? (returntxt + and + "ستمائة") :   returntxt + ' ' + "ستمائة";
                                break;
                        Case 7:
                                // TO DO need to insert a label for seven hundred in Arabic
                                returntxt = returntxt ? (returntxt + and + "سبعمائة") :   returntxt + ' ' + "سبعمائة";
                                break;
                        Case 8:
                                // TO DO need to insert a label for eight hundred in Arabic
                                returntxt = returntxt ? (returntxt + and + "ثمانمائة") :   returntxt + ' ' + "ثمانمائة";
                                break;
                        Case 9:
                                // TO DO need to insert a label for nine hundred in Arabic
                                returntxt = returntxt ? (returntxt + and + "تسعمائة") :   returntxt + ' ' + "تسعمائة";
                                break;

                    }
                }
                numOfPower = numOfPower mod 100;
            }
            if(numOfPower > 2 && _power > 100)
            {
                returntxt = returntxt ?  (returntxt + and + doubleDigit2ARTxt(real2int(numOfPower))) : (returntxt  + ' ' + doubleDigit2ARTxt(real2int(numOfPower)));
            }
            else
            {
                if(returntxt && numOfPower)
                {
                    returntxt = returntxt + and + ' ';
                }
            }
            switch(_power)
            {
                case 1000000000000 :
                {
                    if( numOfPower == 2)
                    {
                        // TO DO need to insert a label for two trillions in Arabic
                        returntxt = returntxt + "تريليونين ";
                    }
                    else
                    {
                        returntxt = numOfPower > 10 ||  numOfPower == 1 || numOfPower == 0 ? (returntxt + ' ' + trillions) : (returntxt + ' ' + "تريليونات");
                    }
                    _test = modOperator(_test, 1000000000000.00);
                    break;
                }
                case 1000000000 :
                {
                    if( numOfPower == 2)
                    {
                        // TO DO need to insert a label for two billions in Arabic
                        returntxt = returntxt + "مليارين";
                    }
                    else
                    {
                        returntxt = numOfPower > 10 ||  numOfPower == 1 || numOfPower == 0 ? (returntxt + ' ' + billions) : (returntxt + ' ' + "مليارات");
                    }
                    _test = modOperator(_test, 1000000000);
                    break;
                }
                case 1000000 :
                {
                    if( numOfPower == 2)
                    {
                        // TO DO need to insert a label for two Millions in Arabic
                        returntxt = returntxt + "مليونين";
                    }
                    else
                    {

                        returntxt = numOfPower > 10 || numOfPower == 1 || numOfPower == 0 ? (returntxt + ' ' + millions) : (returntxt + ' ' + "ملايين");

                    }
                    _test = modOperator(_test, 1000000);
                    break;
                }
                case 1000 :
                {
                    if( numOfPower == 2)
                    {
                        // TO DO need to insert a label for two Thousands' in Arabic
                        returntxt = returntxt + "ألفين";
                    }
                    else
                    {
                        returntxt = numOfPower > 10 ||  numOfPower == 1 || numOfPower == 0  ? (returntxt + ' ' + thousands) : (returntxt + ' ' + "الاف");
                    }
                    _test = modOperator(_test, 1000);
                    break;
                }
                case 100 :
                {
                    switch (numOfPower)
                    {
                        case 2:
                        returntxt = returntxt + "مائتين";
                        break;

                        case 3:
                        returntxt = returntxt +"ثلاثمائة";
                        break;

                        case 4:
                        returntxt = returntxt + "اربعمائة";
                        break;

                        case 5:
                        returntxt = returntxt + "خمسمائة";
                        break;

                        case 6:
                        returntxt = returntxt + "ستمائة";
                        break;

                        case 7:
                        returntxt = returntxt + "سبعمائة";
                        break;

                        case 8:
                        returntxt = returntxt + "ثمانمائة";
                        break;

                        case 9:
                        returntxt = returntxt + "تسعمائة";
                        break;

                        default:
                        returntxt = returntxt + ' ' + hundreds;
                    }

                     _test = modOperator(_test, 100);
                    break;
                }
            }

        }
        return _test;

    }

    //infolog.language("AR");



    #Define.text_1('واحد')
    #Define.text_2('اثنان')
    #Define.text_3('ثلاثة')
    #Define.text_4('اربعة')
    #Define.text_5('خمسة')
    #Define.text_6('ستة')
    #Define.text_7('سبعة')
    #Define.text_8('ثمانية')
    #Define.text_9('تسعة')
    #Define.text_10('عشرة')
    #Define.text_11('احدى عشر')
    #Define.text_12('اثنا عشر')
    #Define.text_13('ثلاثة عشر')
    #Define.text_14('اربعة عشر')
    #Define.text_15('خمسة عشر')
    #Define.text_16('ستة عشر')
    #Define.text_17('سبعة عشر')
    #Define.text_18('ثمانية عشر')
    #Define.text_19('تسعة عشر')
    #Define.text_20('عشرين')
    #Define.text_30('ثلاثين')
    #Define.text_40('اربعين')
    #Define.text_50('خمسين')
    #Define.text_60('ستين')
    #Define.text_70('سبعين')
    #Define.text_80('ثمانين')
    #Define.text_90('تسعين')
    #Define.text_100('مائة')
    #Define.text_200('مائتان')
    #Define.text_300('ثلاثمائة')
    #Define.text_400('أربعمائة')
    #Define.text_500('خمسمائة')
    #Define.text_600('ستمائة')
    #Define.text_700('سبعمائة')
    #Define.text_800('ثمانمائة')
    #Define.text_900('تسعمائة')
    #Define.text_1000('الف')
    #Define.text_1000000('مليون')
    #Define.text_1000000000('بليون')
    #Define.text_1000000000000('تريليون')
    #Define.text_and('و')
    #Define.text_only('فقط')
    #Define.text_cent('هللــه')
    #Define.text_comma('ريـال')
    #Define.text_zero('صفر')

    and     = ' ' + #text_and + ' ';
    comma   = #text_comma;
    zero    = #text_zero;
    cent    = #text_cent;

    ones[1] = #text_1;
    ones[2] = #text_2;
    ones[3] = #text_3;
    ones[4] = #text_4;
    ones[5] = #text_5;
    ones[6] = #text_6;
    ones[7] = #text_7;
    ones[8] = #text_8;
    ones[9] = #text_9;
    ones[10] = #text_10;
    ones[11] = #text_11;
    ones[12] = #text_12;
    ones[13] = #text_13;
    ones[14] = #text_14;
    ones[15] = #text_15;
    ones[16] = #text_16;
    ones[17] = #text_17;
    ones[18] = #text_18;
    ones[19] = #text_19;

    tenths[1] = 'Not used';
    tenths[2] = #text_20;
    tenths[3] = #text_30;
    tenths[4] = #text_40;
    tenths[5] = #text_50;
    tenths[6] = #text_60;
    tenths[7] = #text_70;
    tenths[8] = #text_80;
    tenths[9] = #text_90;

    hundreds = #text_100;
    thousands = #text_1000;
    millions = #text_1000000;
    billions = #text_1000000000;
    trillions = #text_1000000000000;

    if(test == 0)
    {
        returntxt = zero;
    }
    else
    {
        test = checkPower(test, 1000000000000);
        test = checkPower(test, 1000000000);
        test = checkPower(test, 1000000);
        test = checkPower(test, 1000);
        test = checkPower(test, 100);
    }

    if(returntxt && test)
    {
        returntxt = returntxt + and + doubleDigit2ARTxt(real2int(test));
    }
    else
    {
        returntxt = returntxt + ' ' + doubleDigit2ARTxt(real2int(test));
    }

    if(numOfPennies)
    {
        //Removing the stars and addin the pound and cent wording to fullfil the Egyptian requierment
        returntxt = returntxt + ' ' + comma + ' ' + and + doubleDigit2ARTxt(numOfPennies,true) + ' ' + cent + '  فقط لاغير  ';
        //returntxt = '***' + returntxt + ' ' + comma + ' ' + doubleDigit2ARTxt(numOfPennies,true);

    }
    else
    {
        //Removing the stars and the zeros if no cents to fullfil the Egyptian requierment
        returntxt = returntxt + ' ' + comma + '  فقط لاغير  ';

        //returntxt = '***' + returntxt + ' ' + comma + ' ' + zero + ' ' + zero;
    }



    return returntxt;
}
downloadDownload PNG downloadDownload JPEG downloadDownload SVG

Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!

Click to optimize width for Twitter