Simple calculator JavaWaktu sedang berkunjung ke blog teman, ada posting yang berisi source code PL/SQL untuk menyebut bilangan dalam database oracle. tapi saya perhatikan koq..wow banyak sekali syntaxnya, tidak kurang dari 3 halaman. Hmm.. saya tertarik untuk membuat program serupa tapi dengan memaksimalkan algoritma agar source codenya tidak telalu banyak. Setelah sedikit utak-atik looping dan if, jadilah program ini. Simple dan tidak banyak source codenya, tapi mampu menyebut bilangan hingga quintilyun (1 quintilyun adalah 1000 quadrilyun dan 1 quadrilyun adalah 1000 trilyun).

Kelemahan program ini adalah ketika menyebutkan bilangan yang lebih dari 100 quadrilyun, 2 digit terakhir salah disebut. Hal ini saya nilai wajar karena keterbatasan bit komputer dalam menyimpan bilangan pecahan yang diproses.

Ok, langsung saja saya jelaskan, pertama saya buat sebuah function untuk menyebut bilangan ratusan. Kenapa ratusan, karena bilangan ini akan disebut berulang-ulang dalam kelipatan ribu. Misalnya 125 Milyar, 125 Juta, 125 Ribu dan 125. Milyar, juta dan ribu hanyalah satuan dalam kelipatan ribu. sedangkan bilangan yang disebut semua dalam ratusan yaitu antara 1 sampai 999.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
String[] angka={"","Satu","Dua","Tiga","Empat","Lima","Enam","Tujuh","Delapan","Sembilan","Sepuluh","Sebelas"};
 
    private String sebut(int x){
        String bilang="";
        int y = x / 100;
        if(y > 0){
            bilang = angka[y]+" Ratus ";
            if(y == 1)bilang="Seratus ";
            x%=100;
        }
        if(x<12)bilang += angka[x];
        else{
            y=x/10;
            x%=10;
            if(y==1)
                bilang +=angka[x] + " Belas";
            else
                bilang += angka[y]+ " Puluh "+ angka[x];
        }
        return bilang;
    }

Setelah itu saya buat function satu lagi yang menyebut seluruh bilangan lengkap dengan satuannya. Jadi bilangan saya bagi dengan kelipatan ribu sapai habis. Dan satuannya saya sesuaikan dengan tingkat pembaginya.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 private String terbilang(long  x){
        int y;
        String bilang="";
        String[] satuan={""," Ribu "," Juta "," Milyar "," Trilyun "," Quadrilyun "," Quintilyun "};
        if(x > Math.pow(10, 20)) return "Bilangan terlalu besar";
        for(int i=6;i>0;i--){
            y =  (int) (x/Math.pow(10, i*3));
            if(y > 0){
                if(y==1 && i==1) bilang += " Seribu "; else bilang += sebut(y) + satuan[i];
            } x %= Math.pow(10, i*3);
        }
        bilang+=sebut((int)x);
        return bilang;
    }

Jika ingin menjalankan dari console tinggal buatkan function main

1
2
3
4
5
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Masukan Bilangan yang akan disebut: ");
        System.out.println(new PenyebutBilangan().terbilang(sc.nextLong()));
    }

tapi jika ingin dijalankan dalam GUI, anda bisa meletakan coding ini pada event KeyReleased

1
2
3
4
5
6
7
8
9
10
11
12
    if(textAngka.getText().equals("")){
            JOptionPane.showMessageDialog(null, "Angka jangan kosong mas !");
            textAngka.setText("0");
        }else if(!Character.isDigit(evt.getKeyChar())&&(evt.getKeyCode()!=10)&&(evt.getKeyCode()!=8)
                &&(evt.getKeyCode()!=127)&&(evt.getKeyCode()!=37)&&(evt.getKeyCode()!=39)){
            JOptionPane.showMessageDialog(this,"Masukan Angka mas, jangan salah input !" + vt.getKeyCode());
            textAngka.setText("0");
        }
        try {
            textTerbilang.setText(terbilang(Long.parseLong(textAngka.getText())));
        } catch (Exception e) {
        }

Silahkan download code lengkapnya disini download
Demikian semoga bermanfaat