Oleh : Hendra & Susan Dewichan
Bagaimana anda membaca 123456789.55 ?
Tentu saja : Seratus Duapuluh Tiga Juta Empat Ratus Lima Puluh Enam Ribu Tujuh Ratus Delapan Puluh Sembilan Rupiah Lima Puluh Lima Sen
Tetapi bagaimana kalau komputer yang melakukan hal tersebut ?
Tentu saja kita membutuhkan suatu program yang dapat menterjemahkan angka-angka tersebut menjadi kata-kata yang sesuai, dan dapatkah anda bayangkan repotnya
melakukan hal tersebut.
Saya sering membaca di mailing list pemrograman, banyak orang menanyakan akan hal tersebut, dan memang tidak sesederhana seperti kita mengeja ketika menulis Kwitansi, Slip Tabungan, CEK dan Giro.
Baiklah, sekarang saya akan membantu anda untuk memahami dasar dari program mengeja terbilang, mari kita lihat kembali angka 123456789.55 yang anda baca sebagai Seratus Duapuluh Tiga Juta Empat Ratus Lima Puluh Enam Ribu Tujuh Ratus Delapan Puluh Sembilan Rupiah Lima Puluh Lima Sen, dan akan saya penggal menjadi potongan yang yang lebih kecil sebagai berikut :
123 456 789 .55
dan perhatikan potongan ejaannya Seratus Duapuluh Tiga Juta
Empat Ratus Limapuluh Enam Ribu
Tujuh Ratus Delapanpuluh Sembilan Rupiah Limapuluh Lima Sen
Jadi pada prinsipnya kita memotongnya menjadi bagian (123) Juta, (456) Ribu, (789) Rupiah, dan (55) Sen.
Sekarang misalnya kita menggambil 123 yang kita baca sebagai Seratus Duapuluh Tiga, dimana kalau kita penggal menjadi potongan yang lebih kecil sebagai berikut :
Dasar Pemrograman Visual Basic Hendra, S.T.
Se ratus Dua puluh Tiga
Jadi pada prinsipnya kita memotongnya menjadi bagian (1) ratus, (2) puluh, (3) satuan. Sehingga akhirnya kita dapat menyusun suatu program sebagai berikut :
Public Function terbilang(x As Currency) Dim triliun As Currency
Dim milyar As Currency Dim juta As Currency Dim ribu As Currency Dim satu As Currency Dim sen As Currency Dim baca As String
'Jika x adalah 0, maka dibaca sebagai 0 If x = 0 Then
baca = angka(0, 1) Else
'Pisah masing-masing bagian untuk triliun, milyar, juta, ribu, rupiah, dan sen
triliun = Int(x * 0.001 ^ 4)
milyar = Int((x - triliun * 1000 ^ 4) * 0.001 ^ 3)
juta = Int((x - triliun * 1000 ^ 4 - milyar * 1000 ^ 3) / 1000 ^ 2) ribu = Int((x - triliun * 1000 ^ 4 - milyar * 1000 ^ 3 - juta * 1000 ^ 2) / 1000)
satu = Int(x - triliun * 1000 ^ 4 - milyar * 1000 ^ 3 - juta * 1000 ^ 2 - ribu * 1000)
sen = Int((x - Int(x)) * 100)
'Baca bagian triliun dan ditambah akhiran triliun If triliun > 0 Then
baca = ratus(triliun, 5) + "triliun " End If
'Baca bagian milyar dan ditambah akhiran milyar If milyar > 0 Then
baca = ratus(milyar, 4) + "milyar " End If
'Baca bagian juta dan ditambah akhiran juta If juta > 0 Then
baca = baca + ratus(juta, 3) + "juta " End If
'Baca bagian ribu dan ditambah akhiran ribu If ribu > 0 Then
baca = baca + ratus(ribu, 2) + "ribu " End If
Dasar Pemrograman Visual Basic Hendra, S.T. baca = baca + ratus(sen, 0) + "sen"
End If End If
terbilang = UCase(Left(baca, 1)) & LCase(Mid(baca, 2)) End Function
Function ratus(x As Currency, posisi As Integer) As String Dim a100 As Integer, a10 As Integer, a1 As Integer
Dim baca As String a100 = Int(x * 0.01)
a10 = Int((x - a100 * 100) * 0.1) a1 = Int(x - a100 * 100 - a10 * 10) 'Baca Bagian Ratus
If a100 = 1 Then baca = "Seratus " Else
If a100 > 0 Then
baca = angka(a100, 2) + "ratus " End If
End If
'Baca Bagian Puluh dan Satuan If a10 = 1 Then
baca = baca + angka(a10 * 10 + a1, 2) Else
If a10 > 0 Then
baca = baca + angka(a10, 2) + "puluh " End If
If a1 > 0 Then
If posisi = 2 And a100 = 0 And a10 = 0 Then baca = baca + angka(a1, 1)
Else
baca = baca + angka(a1, 2) End If
End If End If
ratus = baca End Function
Function angka(x As Integer, posisi As Integer) Select Case x
Case 0: angka = "Nol" Case 1: If posisi = 2 Then angka = "Satu " Else angka = "Se" End If
Case 2: angka = "Dua " Case 3: angka = "Tiga " Case 4: angka = "Empat " Case 5: angka = "Lima " Case 6: angka = "Enam " Case 7: angka = "Tujuh " Case 8: angka = "Delapan " Case 9: angka = "Sembilan " Case 10: angka = "Sepuluh "
Dasar Pemrograman Visual Basic Hendra, S.T. Case 12: angka = "Duabelas "
Case 13: angka = "Tigabelas " Case 14: angka = "Empatbelas " Case 15: angka = "Limabelas " Case 16: angka = "Enambelas " Case 17: angka = "Tujuhbelas " Case 18: angka = "Delapanbelas " Case 19: angka = "Sembilanbelas " End Select
End Function
Ok, akhirnya segala sesuatu menjadi sederhana kalau kita telah memahami konsep dasar pemecahan masalahanya.
Dasar Pemrograman Visual Basic Hendra, S.T.
Membuat Program Mengeja Bilangan
Function SpellDigit(x)
Dim cRet As String cRet = ""
Select Case x
Case 0: cRet = " ZERO" Case 1: cRet = " ONE" Case 2: cRet = " TWO" Case 3: cRet = " THREE" Case 4: cRet = " FOUR" Case 5: cRet = " FIVE" Case 6: cRet = " SIX" Case 7: cRet = " SEVEN" Case 8: cRet = " EIGHT" Case 9: cRet = " NINE" Case 10: cRet = " TEN" Case 11: cRet = " ELEVEN" Case 12: cRet = " TWELVE" Case 13: cRet = " THIRTEEN" Case 14: cRet = " FOURTEEN" Case 15: cRet = " FIFTEEN" Case 16: cRet = " SIXTEEN" Case 17: cRet = " SEVENTEEN" Case 18: cRet = " EIGHTEEN" Case 19: cRet = " NINETEEN" Case 20: cRet = " TWENTY" Case 30: cRet = " THIRTY" Case 40: cRet = " FOURTY" Case 50: cRet = " FIFTY" Case 60: cRet = " SIXTY" Case 70: cRet = " SEVENTY" Case 80: cRet = " EIGHTY" Case 90: cRet = " NINETY"
Case 100: cRet = " ONE HUNDRED" Case 200: cRet = " TWO HUNDRED" Case 300: cRet = " THREE HUNDRED" Case 400: cRet = " FOUR HUNDRED" Case 500: cRet = " FIVE HUNDRED" Case 600: cRet = " SIX HUNDRED" Case 700: cRet = " SEVEN HUNDRED" Case 800: cRet = " EIGHT HUNDRED" Case 900: cRet = " NINE HUNDRED" End Select
SpellDigit = cRet
End Function
Function SpellHundred(x)
Dim cRet As String Dim n100 As Integer Dim n10 As Integer Dim n1 As Integer cRet = ""
Dasar Pemrograman Visual Basic Hendra, S.T. n1 = (x - n100 - n10) If n100 > 0 Then cRet = SpellDigit(n100) End If If n10 > 0 Then If n10 = 10 Then
cRet = cRet & SpellDigit(n10 + n1) Else
cRet = cRet & SpellDigit(n10) End If
End If
If n1 > 0 And n10 <> 10 Then cRet = cRet & SpellDigit(n1) End If
SpellHundred = cRet
End Function
Public Function SpellAmount(x)
Dim cRet As String Dim n1000000 As Long Dim n1000 As Long Dim n1 As Integer Dim n0 As Integer On Error Resume Next cRet = "" n1000000 = Int(x / 1000000) * 1000000 n1000 = Int((x - n1000000) / 1000) * 1000 n1 = Int(x - n1000000 - n1000) n0 = (x - n1000000 - n1000 - n1) * 100 If n1000000 > 0 Then
cRet = SpellHundred(n1000000 / 1000000) & " MILLION" End If
If n1000 > 0 Then
cRet = cRet & SpellHundred(n1000 / 1000) & " THOUSAND" End If
If n1 > 0 Then
cRet = cRet & SpellHundred(n1) End If
If n0 > 0 Then
cRet = cRet & " AND CENTS" & SpellHundred(n0) End If
SpellAmount = cRet & " ONLY"