Advertisement
Dio64

terbilang.js

Oct 22nd, 2019
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const CENT = 0;
  2. const POINT = 1;
  3. const NOMINAL = Array("Nol", "Satu", "Dua", "Tiga", "Empat", "Lima", "Enam", "Tujuh", "Delapan", "Sembilan");
  4. const THOUDELIM = ".";
  5. const DECDELIM = ",";
  6.  
  7. function initCap_(str) {
  8.     return str.toLowerCase().replace(/(?:^|\s)[a-z]/g, function (m) {
  9.         return m.toUpperCase();
  10.     });
  11. };
  12.  
  13. function format_v2(s, r, curr) {
  14.     s += "";
  15.     regexp = /^(\d*\.\d+|\d+)$/gi
  16.  
  17.         if (regexp.test(s)) {
  18.             s = s.replace(/^0+/gi, "");
  19.             s = s.split(".");
  20.             s[1] = Math.round(s[1] / Math.pow(10, s[1].length - r)) + "";
  21.             var l = s[0].length;
  22.             var t = "";
  23.             var c = 0;
  24.             if (l == 0) {
  25.                 s[0] = "0";
  26.                 l = 1;
  27.             };
  28.             while (l > 0) {
  29.                 t = s[0][l - 1] + (c % 3 == 0 && c != 0 ? THOUDELIM : "") + t;
  30.                 l--;
  31.                 c++;
  32.             }
  33.             s[1] = s[1] == undefined ? "0" : s[1];
  34.             for (i = s[1].length; i < r; i++) {
  35.                 s[1] += "0";
  36.             }
  37.             return curr + t + DECDELIM + s[1];
  38.         } else
  39.             return "ERROR: Invalid number format";
  40. }
  41.  
  42. function threedigit(word) {
  43.     while (word.length < 3) {
  44.         word = ("0000000" + word).slice(-3);
  45.     }
  46.     word = word.split("");
  47.     a = word[0];
  48.     b = word[1];
  49.     c = word[2];
  50.     word = "";
  51.     word += (a != "0" ? (a != "1" ? NOMINAL[parseInt(a)] : "Se") : "")
  52.      + (a != "0" ? (a != "1" ? " Ratus" : "ratus") : "");
  53.     word += " " + (b != "0" ? (b != "1" ? NOMINAL[parseInt(b)] : "Se") : "")
  54.      + (b != "0" ? (b != "1" ? " Puluh" : "puluh") : "");
  55.     word += " " + (c != "0" ? NOMINAL[parseInt(c)] : "");
  56.     word = word.replace(/Sepuluh ([^ ]+)/gi, "$1 Belas");
  57.     word = word.replace(/Satu Belas/gi, "Sebelas");
  58.     word = word.replace(/^[ ]+$/gi, "");
  59.  
  60.     return word;
  61. }
  62.  
  63. function twodigitcent(cent) {
  64.     while (cent.length < 2) {
  65.         cent = (cent + "0000000").substr(0, 2);
  66.     }
  67.     cent = cent.split("");
  68.     a = cent[0];
  69.     b = cent[1];
  70.     cent = "";
  71.     cent += (a != "0" ? (a != "1" ? NOMINAL[parseInt(a)] : "Se") : NOMINAL[parseInt(a)])
  72.      + (a != "0" ? (a != "1" ? " Puluh" : "puluh") : "");
  73.     cent += " " + (b != "0" ? NOMINAL[parseInt(b)] : "");
  74.     cent = cent.replace(/Sepuluh ([^ ]+)/gi, "$1 Belas");
  75.     cent = cent.replace(/Satu Belas/gi, "Sebelas");
  76.     cent = cent.replace(/^[ ]+$/gi, "");
  77.  
  78.     return cent;
  79. }
  80.  
  81. function terbilang(s, t, curr) {
  82.     var r = 2;
  83.     if (isNaN(t)) {
  84.         t.toUpperCase().replace(/^\s+|\s+$/g, '');
  85.         t = t == "POINT" ? POINT : CENT;
  86.     }
  87.     t = t == POINT ? POINT : CENT;
  88.  
  89.     s += "";
  90.     regexp = /^(\d*\.\d+|\d+)$/gi
  91.  
  92.         if (regexp.test(s)) {
  93.             s = s.replace(/^0+/gi, "");
  94.             var zero3 = Array("", "Ribu", "Juta", "Milyar", "Trilyun", "Kuadriliun", "Kuantiliun", "Sekstiliun",
  95.                     "Septiliun", "Oktiliun", "Noniliun", "Desiliun");
  96.  
  97.             s = (parseFloat(s)).toFixed(r);
  98.             s = s.split(".");
  99.  
  100.             var word = s[0];
  101.             var cent = s[1];
  102.             if (cent.length < 2) {
  103.                 cent += "0";
  104.             }
  105.  
  106.             var tWord = "";
  107.             var tCent = "";
  108.             var subword = "";
  109.             i = 0;
  110.             while (word.length > 3) {
  111.                 subdigit = threedigit(word.substr(word.length - 3, 3));
  112.                 subword = subdigit + (subdigit != "" ? " " + zero3[i] + " " : "") + subword;
  113.                 word = word.substring(0, word.length - 3);
  114.                 i++;
  115.             }
  116.             subword = threedigit(word) + " " + zero3[i] + " " + subword;
  117.             subword = subword.replace(/^ +$/gi, "");
  118.  
  119.             tWord = (subword == "" ? "NOL" : subword.toUpperCase());
  120.  
  121.             if (parseInt(s[1]) > 0) {
  122.                 tCent += (t == CENT ? " " + curr : " KOMA")
  123.  
  124.                 if (t == CENT) {
  125.                     subword = twodigitcent(cent);
  126.                 } else {
  127.                     // subword=[];
  128.                     // for(i in cent) subword.push(NOMINAL[cent[i]]);
  129.                     // subword=subword.join(" ");
  130.                     subword = twodigitcent(cent);
  131.                 }
  132.                 tCent += (subword == "" ? "" : " ") + subword.toUpperCase()
  133.                  + (subword == "" || t == POINT ? " " + curr : " SEN");
  134.             } else {
  135.                 tCent += curr;
  136.             }
  137.  
  138.             return (tWord + tCent);
  139.         } else
  140.             return "ERROR: Invalid number format";
  141. }
  142.  
  143. function toWords(s, curr) {
  144.     // American Numbering System
  145.     var th = ['', 'thousand', 'million', 'billion', 'trillion'];
  146.     // uncomment this line for English Number System
  147.     // var th = ['','thousand','million', 'milliard','billion'];
  148.  
  149.     var dg = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];
  150.     var tn = ['ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'];
  151.     var tw = ['twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'];
  152.  
  153.     s = s.toString();
  154.     s = s.replace(/[\, ]/g, '');
  155.     if (s != parseFloat(s)) {
  156.         return 'not a number';
  157.     } else {
  158.         sa = (parseFloat(s)).toFixed(2);
  159.         sa = sa.split(".");
  160.  
  161.         var word = sa[0];
  162.         var cent = sa[1];
  163.     }
  164.     var x = s.indexOf('.');
  165.     var fulllength = s.length;
  166.  
  167.     if (x == -1)
  168.         x = s.length;
  169.     if (x > 15)
  170.         return 'too big';
  171.     var startpos = fulllength - (fulllength - x - 1);
  172.     var n = s.split('');
  173.  
  174.     var str = '';
  175.     var str1 = ''; //i added another word called cent
  176.     var sk = 0;
  177.     for (var i = 0; i < x; i++) {
  178.         if ((x - i) % 3 == 2) {
  179.             if (n[i] == '1') {
  180.                 str += tn[Number(n[i + 1])] + ' ';
  181.                 i++;
  182.                 sk = 1;
  183.             } else if (n[i] != 0) {
  184.                 str += tw[n[i] - 2] + ' -';
  185.  
  186.                 sk = 1;
  187.             }
  188.         } else if (n[i] != 0) {
  189.             str += ' ' + dg[n[i]] + ' ';
  190.             if ((x - i) % 3 == 0)
  191.                 str += 'hundred ';
  192.             sk = 1;
  193.         }
  194.         if ((x - i) % 3 == 1) {
  195.             if (sk)
  196.                 str += th[(x - i - 1) / 3] + ' ';
  197.             sk = 0;
  198.         }
  199.     }
  200.     str += curr ;
  201.     // str += (Number(word) > 1 ? 's ' : ' ');
  202.  
  203.     if (x != s.length) {
  204.         str += ' and ';
  205.         // str1 += 'cents ';
  206.         str1 += (Number(cent) > 1 ? 'cents ' : 'cent ');
  207.  
  208.         if (cent.length < 3) {
  209.             s = '0' + cent;
  210.         } else {
  211.             s = cent;
  212.         }
  213.         x = s.indexOf('.');
  214.         fulllength = s.length;
  215.  
  216.         if (x == -1)
  217.             x = s.length;
  218.         if (x > 15)
  219.             return 'too big';
  220.         startpos = fulllength - (fulllength - x - 1);
  221.         n = s.split('');
  222.  
  223.         for (var i = 0; i < x; i++) {
  224.             if ((x - i) % 3 == 2) {
  225.                 if (n[i] == '1') {
  226.                     str += tn[Number(n[i + 1])] + ' ';
  227.                     i++;
  228.                     sk = 1;
  229.                 } else if (n[i] != 0) {
  230.                     str += tw[n[i] - 2] + ' -';
  231.  
  232.                     sk = 1;
  233.                 }
  234.             } else if (n[i] != 0) {
  235.                 str += ' ' + dg[n[i]] + ' ';
  236.                 if ((x - i) % 3 == 0)
  237.                     str += 'hundred ';
  238.                 sk = 1;
  239.             }
  240.             if ((x - i) % 3 == 1) {
  241.                 if (sk)
  242.                     str += th[(x - i - 1) / 3] + ' ';
  243.                 sk = 0;
  244.             }
  245.         }
  246.     }
  247.         str = str.replace(/ - /gi, '-');
  248.         str += ' ' + str1;
  249.         str = str.replace(/- /gi, ' ');
  250.         var result = str.replace(/\s+/gi, ' ');
  251.         result = result.toUpperCase();
  252.        
  253.         return result;
  254. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement