Seringkali kita menemukan di invoice, kwitansi atau surat bukti pembayaran lainnya. Nominal uang disamping ditulis dalam angka numerik juga ditulis dalam format terbilang. Misal 1.250.000,00 ditulis dalam format terbilang 'satu juta dua ratus lima puluh ribu rupiah'.
Untuk menyelesaikan masalah diatas berikut adalah sebuah modul program konversi terbilang menggunakan VB.Net.
Untuk menyelesaikan masalah diatas berikut adalah sebuah modul program konversi terbilang menggunakan VB.Net.
Module ModTerbilang Public Function TerbilangIndonesia(ByVal InputCurrency As String, _ Optional ByVal MataUang As String = "rupiah") As String Dim strInput As String Dim strBilangan As String Dim strPecahan As String On Error GoTo Pesan Dim strValid As String Dim huruf As String Dim i As Integer Dim AngkaTerbilang As String 'Periksa setiap karakter yg diketikkan ke kotak UserID strValid = "1234567890." For i% = 1 To Len(InputCurrency) huruf = Chr(Asc(Mid(InputCurrency, i%, 1))) If InStr(strValid, huruf) = 0 Then AngkaTerbilang = Nothing MsgBox("Harus karakter angka!", _ vbCritical, "Karakter Tidak Valid") End If Next i% If InputCurrency = "" Then End If If Len(Trim(InputCurrency)) > 15 Then GoTo Pesan strInput = CStr(InputCurrency) 'Konversi ke string 'Periksa apakah ada tanda "," jika ya berarti pecahan If InStr(1, strInput, ".", vbBinaryCompare) Then strBilangan = Left(strInput, InStr(1, strInput, ".", vbBinaryCompare) - 1) 'strBilangan = Right(strInput, InStr(1, strInput, ".", vbBinaryCompare) - 2) strPecahan = Trim(Right(strInput, Len(strInput) - Len(strBilangan) - 1)) If MataUang <> "" Then '- Mengatasi kemungkinan adanya nilai sen yang > 99 atau ' memiliki digit pecahan lebih dari 2 digit, maka pecahan ' tersebut dibulatkan ke kelipatan terdekat sebanyak 2 digit. ' Contoh: TerbilangDesimal("20,599") -> menampilkan MataUang ' dibulatkan menjadi: 20,60 -> dibaca menjadi: ' "Dua Puluh Rupiah Enam Puluh Sen" dan BUKAN: ' "Dua Puluh Rupiah Enam Sen". ' Hal ini berlaku hanya yg menampilkan MataUang. If CLng(Trim(strPecahan)) > 99 Then strInput = Format(Math.Round(CDbl(strInput), 2), "#0.00") strPecahan = Format((Right(strInput, Len(strInput) - Len(strBilangan) - 1)), "00") End If '- Mengatasi kemungkinan jumlah digit sen yang hanya 1 angka. ' maka pecahan tersebut harus ditambahkan dengan nol virtual. ' Contoh: TerbilangDesimal("20,5") -> menampilkan MataUang ' dibulatkan menjadi: 20,5 -> dibaca menjadi: ' "Dua Puluh Rupiah Lima Puluh Sen" dan BUKAN: ' "Dua Puluh Rupiah Lima Sen". ' Hal ini berlaku hanya yg menampilkan MataUang. If Len(Trim(strPecahan)) = 1 Then strInput = Format(Math.Round(CDbl(strInput), 2), "#0.00") strPecahan = Format((Right(strInput, Len(strInput) - Len(strBilangan) - 1)), "00") End If 'Yang ini ditutup, untuk memperbaiki ejaan sesudah tanda 'koma (pecahan)... 'TerbilangDesimal = (KonversiBilangan(strBilangan) & "koma " & KonversiBilangan(strPecahan) & "rupiah") '------------------------------------------------------- '- Membetulkan ejaan untuk bilangan setelah tanda koma, ' sebelumnya menggunakan KonversiBilangan, kini memakai ' KonversiPecahan (setiap 1 angka dibaca satu per satu) '- Membuat parameter "MataUang" yg bersifat opsional, ' di mana default-nya = "rupiah". Jika parameter ini ' dikosongkan dengan "" maka kata "rupiah" tidak muncul. '- Menangani kemungkinan ejaan sen jika menggunakan ' mata uang rupiah, di mana nilai sen harus di antara ' mulai 1 dan 99. (Kemungkinan I) ' Contoh: TerbilangDesimal("20,99") ' "Dua Puluh Rupiah Sembilan Puluh Sembilan Sen". '- Menangani kemungkinan ejaan desimal tanpa menggunakan ' mata uang rupiah, di mana nilai desimal dieja per satu ' karakter. (Kemungkinan II) ' Contoh: TerbilangDesimal("20,99", "") ' "Dua Puluh Koma Sembilan Sembilan") 'BANDINGKAN Kemungkinan I dan Kemungkinan II... 'MULAI PERIKSA >>>>>> 'Jika tanpa parameter MataUang (default), berarti akan 'menampilkan kata "Rupiah" dan perhatikan pula penanganan 'ejaan untuk sen. Lihat contoh Kemungkinan I di atas... 'Periksa lagi kemungkinan adanya angka: 20,00 'seharusnya: "Dua Puluh Rupiah" ' dan BUKAN "Dua Puluh Rupiah Sen" 'Jika pemeriksaan berikut ini tidak ada, maka 20,00 'akan dibaca dengan: "Dua Puluh Rupiah Sen" If CLng(Trim(strPecahan)) = 0 Then TerbilangIndonesia = (KonversiBilangan(strBilangan) & MataUang & " " & KonversiBilangan(strPecahan)) Else TerbilangIndonesia = (KonversiBilangan(strBilangan) & MataUang & " " & KonversiBilangan(strPecahan) & "sen") End If Else TerbilangIndonesia = (KonversiBilangan(strBilangan) & "koma " & KonversiPecahan(strPecahan)) End If Else TerbilangIndonesia = (KonversiBilangan(strInput)) End If Exit Function Pesan: TerbilangIndonesia = "(maksimal 15 digit)" End Function Private Function KonversiPecahan(ByVal strAngka As String) As String Dim i%, strJmlHuruf$, Urai$, Kar$ If strAngka = "" Then KonversiPecahan = "" End If strJmlHuruf = Trim(strAngka) Urai = "" Kar = "" For i = 1 To Len(strJmlHuruf) 'Tampung setiap satu karakter ke Kar Kar = Mid(strAngka, i, 1) Urai = Urai & Kata(CInt(Kar)) Next i KonversiPecahan = Urai End Function Private Function Kata(ByVal angka As Byte) As String Dim kata1 As String = "" Select Case angka Case 1 : kata1 = "satu " Case 2 : kata1 = "dua " Case 3 : kata1 = "tiga " Case 4 : kata1 = "empat " Case 5 : kata1 = "lima " Case 6 : kata1 = "enam " Case 7 : kata1 = "tujuh " Case 8 : kata1 = "delapan " Case 9 : kata1 = "sembilan " Case 0 : kata1 = "nol " End Select Return kata1 End Function Private Function KonversiBilangan(ByVal strAngka As String) As String Dim strJmlHuruf As String Dim intPecahan As Integer = 0 Dim strPecahan As String = "" Dim Urai As String = "" Dim Bil1 As String = "" Dim strTot As String = "" Dim Bil2 As String = "" Dim X, Y, z As Integer If strAngka = "" Then KonversiBilangan = "" End If strJmlHuruf = Trim(strAngka) X = 0 Y = 0 Urai = "" While (X < x =" X" strtot =" Mid(strJmlHuruf," y =" Y" z =" Len(strJmlHuruf)" bil1 = "NOL " z =" 1" z =" 7" z =" 10" z =" 13)" bil1 = "satu " z =" 4)" x =" 1)" bil1 = "se" bil1 = "satu " z =" 2" z =" 5" z =" 8" z =" 11" z =" 14)" x =" X" strtot =" Mid(strJmlHuruf," z =" Len(strJmlHuruf)" bil2 = "" bil1 = "sepuluh " bil1 = "sebelas " bil1 = "dua belas " bil1 = "tiga belas " bil1 = "empat belas " bil1 = "lima belas " bil1 = "enam belas " bil1 = "tujuh belas " bil1 = "delapan belas " bil1 = "sembilan belas " bil1 = "se" bil1 = "dua " bil1 = "tiga " bil1 = "empat " bil1 = "lima " bil1 = "enam " bil1 = "tujuh " bil1 = "delapan " bil1 = "sembilan " bil1 = ""> 0) Then If (z = 2 Or z = 5 Or z = 8 Or z = 11 Or z = 14) Then Bil2 = "puluh " ElseIf (z = 3 Or z = 6 Or z = 9 Or z = 12 Or z = 15) Then Bil2 = "ratus " Else Bil2 = "" End If Else Bil2 = "" End If If (Y > 0) Then Select Case z Case 4 Bil2 = Bil2 + "ribu " Y = 0 Case 7 Bil2 = Bil2 + "juta " Y = 0 Case 10 Bil2 = Bil2 + "milyar " Y = 0 Case 13 Bil2 = Bil2 + "trilyun " Y = 0 End Select End If Urai = Urai + Bil1 + Bil2 End While KonversiBilangan = Urai End Function Private Function SpellDigit(ByVal strNumeric As Integer) Dim cRet As String On Error GoTo Pesan cRet = "" Select Case strNumeric 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 = " ninetieen" Case 20 : cRet = " twenty" Case 30 : cRet = " thirty" Case 40 : cRet = " fourthy" 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 Exit Function Pesan: SpellDigit = "(maksimal 9 digit)" End Function Private Function SpellUnit(ByVal strNumeric As Integer) Dim cRet As String Dim n100 As Integer Dim n10 As Integer Dim n1 As Integer On Error GoTo Pesan cRet = "" n100 = Int(strNumeric / 100) * 100 n10 = Int((strNumeric - n100) / 10) * 10 n1 = (strNumeric - 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 SpellUnit = cRet Exit Function Pesan: SpellUnit = "(maksimal 9 digit)" End Function Public Function TerbilangInggris(ByVal strNumeric As String) As String Dim cRet As String Dim n1000000 As Long Dim n1000 As Long Dim n1 As Integer Dim n0 As Integer On Error GoTo Pesan Dim strValid As String = "" Dim huruf As String = "" Dim i As Integer 'Periksa setiap karakter masukan strValid = "1234567890.," For i% = 1 To Len(strNumeric) huruf = Chr(Asc(Mid(strNumeric, i%, 1))) If InStr(strValid, huruf) = 0 Then MsgBox("Harus karakter angka!", _ vbCritical, "Karakter Tidak Valid") TerbilangInggris = "" End If Next i% If strNumeric = "" Then TerbilangInggris = "" End If If Len(Trim(strNumeric)) > 9 Then GoTo Pesan cRet = "" n1000000 = Int(strNumeric / 1000000) * 1000000 n1000 = Int((strNumeric - n1000000) / 1000) * 1000 n1 = Int(strNumeric - n1000000 - n1000) n0 = (strNumeric - n1000000 - n1000 - n1) * 100 If n1000000 > 0 Then cRet = SpellUnit(n1000000 / 1000000) & " million" End If If n1000 > 0 Then cRet = cRet & SpellUnit(n1000 / 1000) & " thousand" End If If n1 > 0 Then cRet = cRet & SpellUnit(n1) End If If n0 > 0 Then cRet = cRet & " and cents" & SpellUnit(n0) End If TerbilangInggris = cRet & " only" Exit Function Pesan: TerbilangInggris = "(maximum 9 digit)" End Function End Module
No comments:
Post a Comment