Skip to main content
Alex Doubts
Known Participant
August 28, 2017
Question

How to convert a decimal number to arabic word

  • August 28, 2017
  • 1 reply
  • 396 views

Hai i have been converting a decimal number to english word using below script. Is anybody help me to convert the same to arabic word ?

var th = ['', 'thousand', 'million', 'billion', 'trillion'];

var dg = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];

var tn = ['ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'];

var tw = ['twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'];

//-------------------------------------------------------

function num2String(s1) {

    var num = s1.toString();

    var s2 = num.split('.');

    var decPoint = '';

    var lang = '';

    if (s2.length > 1) {

        if (s2[1].length == 1)

            s2[1] = s2[1] * 10;

        if (getField("ddlDebitCurrency").value == "0" || getField("ddlDebitCurrency").value == "Others")

            decPoint = ' and ' + toWords(s2[1]) + ' ';

        else

            decPoint = ' and ' + toWords(s2[1]) + GetCurrencyDetails(getField("ddlDebitCurrency").value, 1);

    }

    if (getField("ddlDebitCurrency").value == "0" || getField("ddlDebitCurrency").value == "Others")

        lang = '' + toWords(s2[0]) + decPoint + ' only';

    else

        lang = getField("ddlDebitCurrency").value + ' ' + toWords(s2[0]) + decPoint + ' only';

    lang = lang.replace('   ', ' ');

    return lang.replace('  ', ' ');

}

//------------------------------------------------------------

//-----------------------------------------

function GetCurrencyDetails(strCurrencyCode, flgCurType) {

    var CurrencyCode = ['AED', 'ATS', 'AUD', 'BDT', 'BEF', 'BHD', 'BRL', 'CAD', 'CHF', 'CNY',

                'DEM', 'DKK', 'DZD', 'EGP', 'ESP', 'EUR', 'FRF', 'GBP', 'HKD', 'IDR',

                'INR', 'ITL', 'JOD', 'JPY', 'KRW', 'KWD', 'LKR', 'LYD', 'MAD', 'MRO',

                'MYR', 'NLG', 'NOK', 'NZD', 'OMR', 'PHP', 'PKR', 'QAR', 'RSD', 'RUB',

                'SAR', 'SEK', 'SGD', 'TND', 'TRY', 'USD', 'ZAR', 'Others'];

    var CurrencyName = ['dirham', 'schillings', 'dollars', 'taka', 'francs', 'dinar', 'real', 'dollar', 'francs', 'Yuan Renminbi',

                     'Deutsche Mark', 'krone', 'dinar', 'pound', 'pesetas', 'euro', 'francs', 'sterling', 'dollar', 'rupiah',

                     'rupee', 'lira', 'dinar', 'yen', 'won', 'dinar', 'rupee', 'Libyan Dinar', 'dirhams', 'XOF',

                     'ringgit', 'guilders', 'krone', 'dollar', 'omani', 'peso', 'rupee', 'riyal', 'dinar', 'ruble',

                     'riyal', 'krone', 'dollars', 'dinar', 'lira', 'dollar', 'rand', 'Others'];

    var CurrencySubDivision = ['fils', 'cents', 'cents', 'paisa', 'cents', 'fils', 'centavos', 'cents', 'centimens', 'fen',

                'cent', 'ore', 'centimes', 'piastres', 'cents', 'cents', 'cents', 'pence', 'cents', 'sen',

                'paise', 'cents', 'fils', 'cen', 'chon', 'fils', 'cents', 'dirham', 'centimens', 'khoum',

                'sen', 'cents', 'ore', 'cents', 'baiza', 'centavos', 'paisa', 'dirhams', 'paras', 'kopeks',

                'halala', 'ore', 'cents', 'millimes', 'kurus', 'cents', 'cents', ''];

    var x = CurrencyCode.length;

    for (var i = 0; i < x; i++) {

        if (CurrencyCode == strCurrencyCode) {

            if (flgCurType == 1) {

                return CurrencySubDivision;

            }

            else

                return CurrencyName;

        }

    }

}

//-----------------------------------------

//--------------------------------------------------

function toWords(s) {

    s = s.toString();

    s = s.replace(/[\, ]/g, '');

    if (s != parseFloat(s)) return 'not a number';

    var x = s.indexOf('.');

    if (x == -1) x = s.length;

    if (x > 15) return 'too big';

    var n = s.split('');

    var str = '';

    var sk = 0;

    for (var i = 0; i < x; i++) {

        if ((x - i) % 3 == 2) {

            if (n == '1') {

                str += tn[Number(n[i + 1])] + ' ';

                i++;

                sk = 1;

            }

            else if (n != 0) {

                str += tw[n - 2] + ' ';

                sk = 1;

            }

        }

        else if (n != 0) {

            str += dg[n] + ' ';

            if ((x - i) % 3 == 0) str += 'hundred ';

            sk = 1;

        }

        if ((x - i) % 3 == 1) {

            if (sk) str += th[(x - i - 1) / 3] + ' ';

            sk = 0;

        }

    }

    if (x != s.length) {

        var y = s.length;

        str += 'point ';

        for (var i = x + 1; i < y; i++) str += dg[n] + ' ';

    }

    return str.replace(/\s+/g, ' ');

}

This topic has been closed for replies.

1 reply

try67
Community Expert
Community Expert
August 28, 2017

That is a very complicated task. For starters, the smaller numbers in Arabic need to be written before the larger ones. So "41" is "one-and-forty", not "forty-one"... On top of that there's the issue of encoding the Arabic text in the code.

This task is also not something that is specific to PDF files, but requires generic JS code.

You can try searching online and see if there are pre-written functions that do it. Don't expect the people posting here to do it for you, unless you're willing to hire someone to do so.