Friday, May 04, 2007

Fungsi Terbilang

Fungsi terbilang cukup umum dipakai dalam pemrograman sehari hari, namun tidak ada salahnya saya tuliskan disini sebagai salah satu referensi untuk temen-temen programmer.
Saya tulis code ini dengan Ms. VFP so, kalo ada yang kebetulan pake aplikasi program lainnya, silahkan dikonversi sendiri. Untuk Fungsi terbilang Inggris mungkin ada yang mau mengkoreksi, masalahnya belum sempat koreksi.

cara pakainya cukup simpel, tinggal panggil fungsi dan masukkan dalam sebuah variable.

Contoh :
cBilang = Terbilang(20003)
cBilang = SAYENGLISH(20003)

hasilnya akan tersimpan dalam variable cBilang, Silahkan Mencoba.




======
FUNCTION TERBILANG
PARAMETERS Nilai as Double
PUBLIC sat,ratus,ribu,juta,miliar,ribuan,ratusan,txt,trilyun
Sat = STR(Nilai,18,2)
Des = IIF(RIGHT(sat,1) = '0',VAL(SUBSTR(Sat,17,1)),VAL(RIGHT(Sat,2)))
Ratus = VAL(SUBSTR(Sat,13,3))
Ribu = VAL(SUBSTR(Sat,10,3))
Juta = VAL(SUBSTR(Sat,7,3))
Miliar = VAL(SUBSTR(Sat,4,3))
Trilyun = VAL(LEFT(Sat,3))

Ribuan = IIF(Ribu = 0," ",IIF(Ribu = 1,"Seribu", BilangDetail(Ribu)+" Ribu"))
Jutaan = IIF(Juta = 0," ",(BilangDetail(Juta)+" Juta"))
Miliaran = IIF(Miliar = 0," ",(BilangDetail(Miliar)+" Miliard"))

DO CASE
CASE Nilai < txt =" BilangDetail(Ratus)" txt =" Ribuan+" txt =" BilangDetail(Juta)+" txt =" BilangDetail(Miliar)+" txt =" BilangDetail(Trilyun)+" txt="txt+">= 10
txt=txt+" Koma "+BilangDetail(Des)
ENDCASE
RETURN(TXT+" Rupiah")

FUNCTION BilangDetail
PARAMETERS Detil
st = STR(Detil,3)
s = VAL(RIGHT(st,1))
p = VAL(SUBSTR(st,2,1))
r = VAL(LEFT(st,1))

bil = "Satu Dua Tiga Empat Lima Enam Tujuh Delapan Sembilan"
IF s = 0
ts = " "
ELSE
ts = ALLTRIM(SUBSTR(bil,s*8-7,8))+" "
ENDIF
DO CASE
CASE p = 0
tp = ts
CASE p = 1
DO CASE
CASE s = 0
tp = " Sepuluh "
CASE s = 1
tp = " Sebelas "
OTHERWISE
tp= TRIM(SUBSTR(bil,s*8-7,8))+" Belas "
ENDCASE
OTHERWISE
tp = TRIM(SUBSTR(bil,p*8-7,8))+" Puluh "+ts
ENDCASE
DO CASE
CASE r = 0
tr = tp
CASE r = 1
tr = "Seratus "+ALLTRIM(tp)
OTHERWISE
tr = TRIM(SUBSTR(bil, r*8-7,8))+" Ratus "+ALLTRIM(tp)
ENDCASE
RETURN(TRIM(tr))


FUNCTION SAYENGLISH
PARAMETERS Nilai as Double
PUBLIC koma,sat,ratus,ribu,juta,miliar,ribuan,ratusan,txt,trilyun

Sat = STR(Nilai,18,2)
Des = VAL(RIGHT(Sat,2))
Ratus = VAL(SUBSTR(Sat,13,3))
Ribu = VAL(SUBSTR(Sat,10,3))
Juta = VAL(SUBSTR(Sat,7,3))
Miliar = VAL(SUBSTR(Sat,4,3))
Trilyun = VAL(LEFT(Sat,3))

Ribuan = IIF(Ribu = 0," ",(SAYENGLISHDETAIL(Ribu)+" Thousand"))
Jutaan = IIF(Juta = 0," ",(SAYENGLISHDETAIL(Juta)+" Million"))
Miliaran = IIF(Miliar = 0," ",(SAYENGLISHDETAIL(Miliar)+" Billion"))

DO CASE
CASE Nilai < txt =" SAYENGLISHDETAIL(Ratus)" txt =" Ribuan+" txt =" SAYENGLISHDETAIL(Juta)+" txt =" SAYENGLISHDETAIL(Miliar)+" txt =" SAYENGLISHDETAIL(Trilyun)+">0
txt=txt+" Point "+SAYENGLISHDETAIL(Des)
ENDIF
RETURN(TXT+" Dollars")

FUNCTION SAYENGLISHDETAIL
PARAMETERS Detil
st = STR(Detil,3)
s = VAL(RIGHT(st,1))
p = VAL(SUBSTR(st,2,1))
r = VAL(LEFT(st,1))

bil = "One Two Three Four Five Six Seven Eight Nine"
bil2 = "One Two Third Four Fif Six Seven Eight Nine"
IF s = 0
ts = " "
ELSE
ts = ALLTRIM(SUBSTR(bil,s*8-7,8))+" "
ENDIF
DO CASE
CASE p = 0
tp = ts
CASE p = 1
DO CASE
CASE s = 0
tp = "Ten "
CASE s = 1
tp = "Eleven "
CASE s = 2
tp = "Twelve "
OTHERWISE
tp= ALLTRIM(SUBSTR(bil2,s*8-7,8))+"teen "
ENDCASE
OTHERWISE
tp = allTRIM(SUBSTR(bil2,p*8-7,8))+"ty "+ts
ENDCASE
DO CASE
CASE r = 0
tr = tp
*!* CASE r = 1
*!* tr = "Seratus "+ALLTRIM(tp)
OTHERWISE
tr = allTRIM(SUBSTR(bil, r*8-7,8))+" Hundred "+ALLTRIM(tp)
ENDCASE
RETURN(TRIM(tr))


=====
Semoga bermanfaat..

2 comments:

  1. Anonymous12:42 PM

    thank u ya mas,.. saya numpang copy paste boleh kan :-)

    ReplyDelete
  2. Monggo disekecakaken...

    ReplyDelete