Fungsi Terbilang Menggunakan JAVA

Kali ini aku akan menulis mengenai fungsi “terbilang” menggunakan JAVA. Untuk algoritma yg digunakan kuperoleh dari http://davidnakoko.wordpress.com/2008/01/14/membuat-fungsi-terbilang-microsoft-excel-2000/. Dari situs tersebut algoritma fungsi terbilang ditulis dalam VB, namun pada tulisan ini dilakukan sedikit modifikasi dengan menggunakan JAVA.

Fungsi terbilang pada tulisan ini mencapai nilai rentang maksimal sebesar 999.999.999.999.999 (Sembilan Ratus Sembilan Puluh Sembilan Trilyun Sembilan Ratus Sembilan Puluh Sembilan Milyar Sembilan Ratus Sembilan Puluh Sembilan Juta Sembilan Ratus Sembilan Puluh Sembilan Ribu Sembilan Ratus Sembilan Puluh Sembilan). Dan jika angka yang dimasukkan bernilai negatif, maka hasil dari kalimat terbilangnya akan disisipi kata Minus. Selain itu, pada fungsi ini diasumsikan nilai yang diinput adalah bilangan bulat sehingga tidak meng-handle angka dibelakang koma.

Algoritma terbilang ini menggunakan fungsi rekursif dan gambar dibawah merupakan potongan program dari algoritma ini.

    public String getTerbilang(BigDecimal dataUang) {
        final String CONST_SPASI = " ";
        final String CONST_NOL = "0";
        final String CONST_11 = "11";
        final String CONST_19 = "19";
        final String CONST_99 = "99";
        final String CONST_199 = "199";
        final String CONST_999 = "999";
        final String CONST_1999 = "1999";
        final String CONST_999_RIBU = "999999";
        final String CONST_999_JUTA = "999999999";
        final String CONST_999_MILYAR = "999999999999";
        final String CONST_999_TRILYUN = "999999999999999";
        StringBuilder result = new StringBuilder();
        int satuan;

        // cek apakah data minus
        if (dataUang.compareTo(BigDecimal.ZERO) < 0) {
            dataUang = dataUang.multiply(BigDecimal.ONE.negate());
            result.append("Minus");

        }

        // data dianggap tidak minus
        if (cekData(dataUang, CONST_NOL, CONST_11)) {
            result.append(CONST_SPASI)
                    .append(getSatuan(dataUang.intValue()));
        } else if (cekData(dataUang, CONST_11, CONST_19)) {
            result.append(getTerbilang(mod(dataUang, PEMBAGI_SEPULUH)))
                    .append(CONST_SPASI)
                    .append("Belas");
        } else if (cekData(dataUang, CONST_19, CONST_99)) {
            result.append(getTerbilang(div(dataUang, PEMBAGI_SEPULUH)))
                    .append(CONST_SPASI)
                    .append("Puluh")
                    .append(getTerbilang(mod(dataUang, PEMBAGI_SEPULUH)));
        } else if (cekData(dataUang, CONST_99, CONST_199)) {
            result.append(CONST_SPASI)
                    .append("Seratus")
                    .append(getTerbilang(dataUang.subtract(new BigDecimal(PEMBAGI_SERATUS))));
        } else if (cekData(dataUang, CONST_199, CONST_999)) {
            result.append(getTerbilang(div(dataUang, PEMBAGI_SERATUS)))
                    .append(CONST_SPASI)
                    .append("Ratus")
                    .append(getTerbilang(mod(dataUang, PEMBAGI_SERATUS)));
        } else if (cekData(dataUang, CONST_999, CONST_1999)) {
            result.append(CONST_SPASI)
                    .append("Seribu")
                    .append(getTerbilang(dataUang.subtract(new BigDecimal(PEMBAGI_SERIBU))));
        } else if (cekData(dataUang, CONST_1999, CONST_999_RIBU)) {
            result.append(getTerbilang(div(dataUang, PEMBAGI_SERIBU)))
                    .append(CONST_SPASI)
                    .append("Ribu")
                    .append(getTerbilang(mod(dataUang, PEMBAGI_SERIBU)));
        } else if (cekData(dataUang, CONST_999_RIBU, CONST_999_JUTA)) {
            result.append(getTerbilang(div(dataUang, PEMBAGI_SEJUTA)))
                    .append(CONST_SPASI)
                    .append("Juta")
                    .append(getTerbilang(mod(dataUang, PEMBAGI_SEJUTA)));
        }else if (cekData(dataUang, CONST_999_JUTA, CONST_999_MILYAR)){
            result.append(getTerbilang(div(dataUang, PEMBAGI_SEMILYAR)))
                    .append(CONST_SPASI)
                    .append("Milyar")
                    .append(getTerbilang(mod(dataUang, PEMBAGI_SEMILYAR)));
        }else if (cekData(dataUang, CONST_999_MILYAR, CONST_999_TRILYUN)){
            result.append(getTerbilang(div(dataUang, PEMBAGI_SETRILYUN)))
                    .append(CONST_SPASI)
                    .append("Trilyun")
                    .append(getTerbilang(mod(dataUang, PEMBAGI_SETRILYUN)));
        }

        return result.toString();
    }

Untuk mengambil penyebutan satuannya dapat dilihat pada gambar berikut:

    // ambil terbilang untuk satuan
    private String getSatuan(int data) {
        switch (data) {
            case 1: return "Satu";
            case 2: return "Dua";
            case 3: return "Tiga";
            case 4: return "Empat";
            case 5: return "Lima";
            case 6: return "Enam";
            case 7: return "Tujuh";
            case 8: return "Delapan";
            case 9: return "Sembilan";
            case 10: return "Sepuluh";
            case 11: return "Sebelas";
            default: return " ";
        }
    }

Adapun untuk memanggil fungsi ini dapat dilakukan dengan cara berikut

System.out.println(new Terbilang().getTerbilang(new BigDecimal("999999999999999")));

Selengkapnya source code dapat di download di sini.

Kata Kunci: fungsi terbilang, algoritma terbilang, terbilang menggunakan JAVA




Leave a Reply

[+] kaskus emoticons nartzco