Class Terbilang dan implementasinya pada Swing di Java | Tempat Belajar dan Berbagi Pengetahuan Java dan PHP
Home » , , , , , » Class Terbilang dan implementasinya pada Swing di Java

Class Terbilang dan implementasinya pada Swing di Java

Dipostingkan Oleh Ridwan Labs pada Minggu, 31 Maret 2013 - Diupdate Pada: 3/31/2013

Sudah banyak yang membahas tentang fungsi terbilang, baik di java, php, atau bahasa pemograman lainnya. tapi bahasan ini masih tetap menarik untuk di bahas. kebanyakan dari kita kebingungan ketika kita mengerjakan konversi ini. dalam postingan ini Membuat fungsi Terbilang dengan PHP, saya sudah memberikan kode untuk membuat fungsi terbilang dengan PHP, Logika tersebut sebenarnya bisa digunakan untuk membuat fungsi terbilang di Java.

Tapi kalaupun sulit untuk memahami logikanya, sekarang ini banyak betebaran kode-kode terbilang hehe. tinggal bagaimana cara kita memanfaatkanya, sehingga bisa digunakan dalam aplikasi yang kita buat. salah satunya class terbilang yang akan saya gunakan.
Menggunakan Class terbilang dalam aplikasi yang menggunakan Swing

Berikut Kode class terbilangnya (Buat class baru kemudian tambahkan method berikut), atau agan-agan bisa mendownload kode projectnya langsung.

private void init() {
        boolean is_neg = false;
        if (clazz.equals(Double.class) || clazz.equals(Float.class)) {
            Double chk = Double.parseDouble(num);
            is_neg = chk < 0;
        } else {
            is_neg = num.startsWith("-") ? true : false;
        }
        String ints = "";
        try {
            Pattern regex = Pattern.compile("^[+-]?(\\d+)");
            Matcher regexMatcher = regex.matcher(num);
            if (regexMatcher.find()) {
                ints = regexMatcher.group(1);
            }
        } catch (PatternSyntaxException ex) {
        }
        int mult = 0;
        String wint = "";
        while (!ints.isEmpty()) {
            try {
                Pattern regex = Pattern.compile("(\\d{1,3})$");
                Matcher regexMatcher = regex.matcher(ints);
                while (regexMatcher.find()) {
                    // ambil satuan, puluhan, dan ratusan
                    int m = Integer.parseInt(regexMatcher.group());
                    int s = (m % 10);
                    int p = ((m % 100 - s) / 10);
                    int r = ((m - p * 10 - s) / 100);
                    // konversi ratusan
                    String g = "";
                    if (r == 0) {
                        g = "";
                    } else if (r == 1) {
                        g = "se" + orders.get("2");
                    } else {
                        g = digits.get("" + r + "") + " " + orders.get("2");
                    }

                    // konversi puluhan dan satuan
                    if (p == 0) {
                        if (s == 0) {
                        } else if (s == 1) {
                            g = (!g.isEmpty() ? (g + " " + digits.get("" + s + "").toString()) : (mult == 0 ? digits.get("1").toString() : "se"));
                        } else {
                            g = (!g.isEmpty() ? g + " " : "") + digits.get("" + s + "").toString();
                        }
                    } else if (p == 1) {
                        if (s == 0) {
                            g = (!g.isEmpty() ? g + " " : "") + "se" + orders.get("1");
                        } else if (s == 1) {
                            g = (!g.isEmpty() ? g + " " : "") + "sebelas";
                        } else {
                            g = (!g.isEmpty() ? g + " " : "") + digits.get("" + s + "") + " belas";
                        }
                    } else {
                        g = (!g.isEmpty() ? g + " " : "") + digits.get("" + p + "") + " puluh" + (s > 0 ? " " + digits.get("" + s + "") : "");
                    }

                    // gabungkan dengan hasil sebelumnya
                    wint = (!g.isEmpty() ? (g + (g.equals("se") ? "" : " ") + orders.get("" + mult + "")) : "") + (!wint.isEmpty() ? " " + wint : "");

                    // pangkas ribuan/jutaan/dsb yang sudah dikonversi
                    String resultString = "";
                    try {
                        Pattern tsRegex = Pattern.compile("\\d{1,3}$");
                        Matcher regexMatchers = tsRegex.matcher(ints);
                        try {
                            resultString = regexMatchers.replaceAll("");
                            ints = resultString;
                        } catch (IllegalArgumentException ex1) {
                        } catch (IndexOutOfBoundsException ex2) {
                        }
                    } catch (PatternSyntaxException ex3) {
                    }
                    mult += 3;
                }
            } catch (PatternSyntaxException ex) {
            }
        }
        if (wint.isEmpty()) {
            wint = digits.get("0").toString();
        }
        //// angka di kanan desimal
        String frac = "";
        try {
            Pattern regexf = Pattern.compile("\\.(\\d+)");
            Matcher regexMatcherf = regexf.matcher(num);
            if (regexMatcherf.find()) {
                frac = regexMatcherf.group();
            }
        } catch (PatternSyntaxException ex) {
        }
        String wfrac = "";
        for (int i = 0; i < frac.length(); i++) {
            String indexf = frac.substring(i, i + 1);
            if (digits.containsKey(indexf)) {
                wfrac += (!wfrac.isEmpty() ? " " : "") + digits.get(indexf);
            }
        }
        result = ((is_neg ? "minus " : "") + wint + ((!wfrac.isEmpty()) ? " koma " + wfrac : ""));
        result = result.replaceAll("\\s{2,}", " ");
        result = result.replaceAll("(null )|(\\s{1,}$)", "");
    }

    /**
     * @return the num
     */
    public String getNum() {
        return num;
    }

    /**
     * @param num the num to set
     */
    public void setNum(Object num) {
        this.num = this.convertNumToString(num);
    }

    /**
     * @return the result
     */
    public String getResult() {
        return result;
    }

    private String convertNumToString(Object value) {
        if (null == clazz) {
            clazz = value.getClass();
        }
        String reval = null;
        if (Character.class.equals(clazz) || char.class.equals(clazz) || Double.class.equals(clazz) || Float.class.equals(clazz) || Integer.class.equals(clazz) || Long.class.equals(clazz) || Short.class.equals(clazz)) {
            reval = value.toString();
        } else {
            reval = value.toString();
            //throw new NumberFormatException("Your Input has failed! Numeric or decimal only can be process");
        }
        return (reval);
    }

Adapun cara menggunakan class ini cukup sederhana, berikut contohnya:
double bilangan = 185099.9;
System.out.println(new JavaTerbilang(bilangan));

Hasilnya seperti Berikut:



Mengintergrasikan Class JavaTerbilang.java dengan Class Swing 
Untuk menggunakan Class ini dalam aplikasi yang menggunakan GUI, cukup mudah, berikut contoh penggunaannya:
String angka = txtAngka.getText();
txtHasil.setText(new JavaTerbilang(angka).toString());

Hasilnya:


Download Projectnya:
 


Terima kasih sudah meluangkan waktu untuk mengunjungi blog ini.
Share this article :

3 komentar:

  1. kalo mau nambahin rupiah gmna gan di belakangnya?

    BalasHapus
    Balasan
    1. Caranya cukup mudah, cek method berikut:
      @Override
      public String toString() {
      init();
      return getResult();
      }

      Ubah menjadi
      @Override
      public String toString() {
      init();
      return getResult() +" " + mataUang;
      }

      Untuk mata uang (rupiah) bisa ditambahkan langsung atau lewat variabel
      Misal
      @Override
      public String toString() {
      init();
      return getResult() +" Rupiah";
      }

      Hapus

Cari Artikel



 
Support : Admin
Copyright © 2013. Tempat Belajar dan Berbagi Pengetahuan Java dan PHP - All Rights Reserved
Template Created by Creating Website Modified by CaraGampang.Com
Proudly powered by Blogger