174 lines
4.6 KiB
JavaScript
174 lines
4.6 KiB
JavaScript
/*
|
|
| @Author Kukuh Prabowo
|
|
| 2015
|
|
| version 0.1
|
|
| @return String
|
|
*/
|
|
|
|
(function( $ ) {
|
|
|
|
$.fn.terbilang = function( options ) {
|
|
|
|
var txtsrc;
|
|
|
|
var setting = $.extend({
|
|
lang: 'id',
|
|
output: $('#terbilang-output')
|
|
}, options);
|
|
|
|
var IDreadThousand = function (n,dg,snum,thousandDesc) {
|
|
var s='';
|
|
var d1=Math.floor(n/100);
|
|
var d2=Math.floor((n-(d1*100))/10);
|
|
var d3=n-(d1*100)-(d2*10);
|
|
|
|
if (d1>0) {
|
|
if (d1==1) {
|
|
s=s+'seratus ';
|
|
} else {
|
|
s=s+snum[d1]+' ratus ';
|
|
}
|
|
}
|
|
|
|
if (d2>0) {
|
|
if (d2==1) {
|
|
switch(d3) {
|
|
case 0: s=s+'sepuluh ';
|
|
break;
|
|
case 1: s=s+'sebelas ';
|
|
break;
|
|
default: s=s+snum[d3]+' belas ';
|
|
}
|
|
} else {
|
|
s=s+snum[d2]+' puluh ';
|
|
}
|
|
}
|
|
|
|
if (d3>0) {
|
|
if ((d2>1)||(d2==0)) {
|
|
if ((dg==1)&(d3==1)) {
|
|
s=s+'se';
|
|
} else {
|
|
s=s+snum[d3]+' ';
|
|
}
|
|
}
|
|
}
|
|
|
|
return s;
|
|
}
|
|
|
|
var ENreadThousand = function (n,snum,thousandDesc,steens,stens) {
|
|
var s='';
|
|
var d1=Math.floor(n/100);
|
|
var d2=Math.floor((n-(d1*100))/10);
|
|
var d3=n-(d1*100)-(d2*10);
|
|
|
|
if (d1>0) {
|
|
s=s+snum[d1]+' hundred ';
|
|
}
|
|
|
|
if (d2>0) {
|
|
if (d2==1) {
|
|
s=s+steens[d3]+' ';
|
|
} else {
|
|
s=s+stens[d2]+' ';
|
|
}
|
|
}
|
|
|
|
if (d3>0) {
|
|
if ((d2>1)||(d2==0)) {
|
|
s=s+snum[d3]+' ';
|
|
}
|
|
}
|
|
|
|
return s;
|
|
}
|
|
|
|
var readAll = function (x,lang) {
|
|
var s='';
|
|
var i=0;
|
|
var isfailed=false;
|
|
|
|
switch(lang) {
|
|
case 'id' : var snum=new Array('nol','satu','dua','tiga','empat','lima','enam','tujuh','delapan','sembilan');
|
|
var thousandDesc=new Array('','ribu','juta','miliar','triliun');
|
|
break;
|
|
case 'en' : var snum=new Array('zero','one','two','three','four','five','six','seven','eight','nine');
|
|
var thousandDesc=new Array('','thousand','million','billion','trillion');
|
|
var steens=new Array('ten','eleven','twelve','thirteen','fourteen','fifteen','sixteen','seventeen','eighteen','nineteen');
|
|
var stens=new Array('','','twenty','thirty','forty','fifty','sixty','seventy','eighty','ninety');
|
|
break;
|
|
default: alert('Unknown language');
|
|
isfailed=true;
|
|
}
|
|
|
|
if (isNaN(x)) {
|
|
isfailed=true;
|
|
alert('Not a number!');
|
|
} else {
|
|
x=parseFloat(x);
|
|
}
|
|
|
|
if (isfailed==false) {
|
|
do {
|
|
var groupNumbers = Math.round(((Math.floor(x)/1000)-Math.floor((Math.floor(x)/1000)))*1000);
|
|
if (lang=='id') {
|
|
s=IDreadThousand(groupNumbers,i,snum,thousandDesc)+thousandDesc[i]+' '+s;
|
|
if (x==0) {s='nol'};
|
|
}
|
|
if (lang=='en') {
|
|
s=ENreadThousand(groupNumbers,snum,thousandDesc,steens,stens)+thousandDesc[i]+' '+s;
|
|
if (x==0) {s='zero'};
|
|
}
|
|
x=Math.floor(Math.floor(x)/1000);
|
|
i++;
|
|
} while (x>0);
|
|
return s.replace(/^\s*|\s(?=\s)|\s*$/g, '');
|
|
} else {
|
|
return 'NaN';
|
|
}
|
|
}
|
|
|
|
var readNumbers = function () {
|
|
var txtout = setting.output;
|
|
switch(setting.lang) {
|
|
case 'id' : var lang = setting.lang;
|
|
var cur='rupiah';
|
|
var cen='sen';
|
|
break;
|
|
case 'en' : var lang = setting.lang;
|
|
var cur='dollar';
|
|
var cen='cent';
|
|
break;
|
|
}
|
|
|
|
var ssrc = txtsrc.val();
|
|
// window.alert(ssrc);
|
|
var ssrc = txtsrc.val().split(/[.]|[,]/);
|
|
var sout=readAll(ssrc,lang)+' '+cur;
|
|
var sout1='';
|
|
if (ssrc[1]!=undefined) {
|
|
sout1=readAll(ssrc[1].substr(0,2),lang)+' '+cen;
|
|
}
|
|
if ((sout.search('NaN')!=-1)||(sout1.search('NaN')!=-1)) {
|
|
txtsrc.val('');
|
|
txtout.val('');
|
|
} else {
|
|
txtout.val(sout+' '+sout1);
|
|
}
|
|
}
|
|
|
|
return this.each(function() {
|
|
var idsrc = $(this);
|
|
$(document).on('keyup change', idsrc, function(e) {
|
|
txtsrc = idsrc;
|
|
if (txtsrc.val() != '') {
|
|
readNumbers();
|
|
} else {
|
|
txtsrc.val('');
|
|
}
|
|
});
|
|
});
|
|
};
|
|
|
|
} (jQuery)); |