Menggunakan Format Currency dan Format Rupiah pada Bahasa Java

Currency format bisa dibilang sebagai hal yang krusial tapi gak penting2 amat. Kenapa?! Karena currency format itu intinya buat ngatur format mata uang. Kenapa krusial?! Coba ajah, dalam suatu transaksi ketulis gini: 10000… Cuma ada 1 sebiji pake 4 angka nol di belakangnya. Banyak kesulitan yang bakal dialamin gara2 angka2 itu… Okeh, gw jabarin yak…

  1. Kesulitan pertama, lo gak tau lo musti bayar dalam apa… rupiah, yen, euro?? Gak jelas kan…
  2. Anggaplah lo bayar itu pake rupiah, ngitungin angka nol di belakang angka non-nol tanpa pemisah titik itu butuh usaha chuyy, walo sedikit c. Tapi, kadang lebih enak kalo formatnya dipisahin pake titik per-3 angka dan kalo mau, pake koma jugak boleh.
  3. Kasus ke-3, mirip ama kasus ke-2… cuma, bedanya kalo format US, ribuan itu dipisahin pake koma dan enggak pake nol. Jadi musti pilih2 jugak…
  4. Kasus ke-4, kalo ternyata pengeluaran buat menuhin keinginan lebih banyak daripada pemasukan, pastinya bakal bikin pusing… iya kan?! Iya! Pasti gitu!! Eh… tapi ini c gak alasan yang sesuai c yah, jadi abaikan alasan ini teman-temaaan.

Karena beberapa alasan di atas (yang terkesan mengada2 tapi pastinya penting), makanya format currency itu penting. Java, udah nge-cover hal ini… tapi sayangnya cuma buat beberapa format ajah, dan Indonesia belum termasuk di dalamnya. Jadi, selain ngebahas format currency dari kelas NumberFormat, di sini jugak bakal ditulisin sedikit trik buat nulisin nominal uang pake format rupiah…

Yang perlu kamu lakukan adalah menggunakan kelas NumberFormat di package java.text plus bantuan format local dari package java.util.Locale. Kira2 nanti ada import gini:

import java.text.NumberFormat;
import java.util.Locale;

Terus nanti, ada sebuah format yang kita tentukan, terus harga yang kita tampilkan sesuai format itu. Jadi, karena bicaranya sekarang tentang format, yang dipake System.out.printf… Bukan System.out.print atau System.out.println. Templatenya gini:

NumberFormat formatKurensi = NumberFormat.getCurrencyInstance(LOCALE_FORMAT);
System.out.printf("Harga : %s %n", formatKurensi.format(angka));

Contohnya:

import java.text.NumberFormat;
import java.util.Locale;
/**
 *
 * @author arby
 */
public class Kurensi {
    public static void main(String[] args) {
        double harga = 250000000;
        NumberFormat kurensiEropa = NumberFormat.getCurrencyInstance(Locale.UK);
        System.out.printf("Harga Pound: %s %n", kurensiEropa.format(harga));

        NumberFormat kurensiJepang = NumberFormat.getCurrencyInstance(Locale.JAPAN);
        System.out.printf("Harga Yen: %s %n", kurensiJepang.format(harga));

        NumberFormat kurensiUS = NumberFormat.getCurrencyInstance(Locale.US);
        System.out.printf("Harga Dolar: %s %n", kurensiUS.format(harga));

        NumberFormat kurensiPrancis = NumberFormat.getCurrencyInstance(Locale.FRANCE);
        System.out.printf("Harga Euro: %s %n", kurensiPrancis.format(harga));

        NumberFormat kurensiKorea = NumberFormat.getCurrencyInstance(Locale.KOREA);
        System.out.printf("Harga Won: %s %n", kurensiKorea.format(harga));

        System.out.printf("%.2f", harga);

    }
}

Hasilnya:

Selection_001

Kalo bingung, %s itu untuk nampilin harga gabungin ke string.. Jadi mirip penulisan cara c/cpp gitu. Kalo %n untuk ngasi line new atau garis baru biar mirip System.out.println. Kalo yang terakhir (%.2f), itu cuma buat nampilin angka yang besar supaya tetap tampil plus pake 2 angka belakang koma. Coz biasanya kalo angka besar dimunculin gitu ajah, munculnya dalam format pangkat. Contohnya aja kalo di atas 250000000 dimunculin apa adanya, tampilnya “2.5E8”.

Di atas, kalo mau nampilin dari format yang terkenal dan umum. Kalo Indonesia gimana?! Indonesia kan beda, coz angka-nya dipisahin pake titik, terus 2 angka belakang baru pake koma. Kebalikan dari format yang ditampilin di atas. Tapi mirip sama format Euro.. beda pemisah spasi-titik ama simbol.

Coba sekarang jadiin format Indonesia dengan gak masukin parameter apapun di bagian “getCurrencyInstance()”. Atau kalo mau pake “getNumberInstance()” juga boleh. Kalo gak berhasil, artinya format yang kebaca di mesin-nya masih format US atau yang gak sesuai lha.. Jadi, kita agak tricky dikit. Kita pake DecimalFormat sama DecimalFormatSymbols dan bukan NumberFormat atau Locale. Jadi, ada 2 import yang ditambahkan:

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;

Di sini, sifatnya sama… kita tentuin formatnya, tampilin harga format sesuai yang diinginkan. Perbedaannya, kalo tadi nentuin format otomatis, sekarang c tentuin sendiri… gini:

DecimalFormat kursIndonesia = (DecimalFormat) DecimalFormat.getCurrencyInstance();
DecimalFormatSymbols formatRp = new DecimalFormatSymbols();

formatRp.setCurrencySymbol("Rp. ");
formatRp.setMonetaryDecimalSeparator(',');
formatRp.setGroupingSeparator('.');

kursIndonesia.setDecimalFormatSymbols(formatRp);
System.out.printf("Harga Rupiah: %s %n", kursIndonesia.format(harga));

Jadi nentuin formatnya dari objek DecimalFormatSymbols, trus bikin kurensi dari DecimalFormat… gitu… Lengkapnya gini:

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;

/**
 *
 * @author arby
 */
public class KurensiIndonesia {

    public static void main(String[] args) {
        double harga = 250000000;

        DecimalFormat kursIndonesia = (DecimalFormat) DecimalFormat.getCurrencyInstance();
        DecimalFormatSymbols formatRp = new DecimalFormatSymbols();

        formatRp.setCurrencySymbol("Rp. ");
        formatRp.setMonetaryDecimalSeparator(',');
        formatRp.setGroupingSeparator('.');

        kursIndonesia.setDecimalFormatSymbols(formatRp);
        System.out.printf("Harga Rupiah: %s %n", kursIndonesia.format(harga));
    }
}

Hasil:
Selection_002

Okeh… begitulah… gak bingung lagi yah ngatur2 duit… errrr, maksudnya ngatur tampilan format duit… Ja na, minna….

Baca juga: Mengubah rupiah –> double.

30 thoughts on “Menggunakan Format Currency dan Format Rupiah pada Bahasa Java

    • Sayangnya gw gak tau kalo currency symbol bisa diletakin di belakang atau enggak.
      Dan sewajarnya c gak bisa.

      Tapi kalo emang butuh banget, bisa ubah dari decimal format-nya, jadi gini:
      DecimalFormat df = new DecimalFormat(“,###.00 $”);

      Lengkapnya

      import java.text.DecimalFormat;
      
      public class MainUang1 {
          public static void main(String[] args) {
              DecimalFormat df = new DecimalFormat(",###.00 $");
              double money = 123456123123567.89;
              System.out.println("\nFormat Uang: "+ df.format(money));
          }
      }
      

      Jadinya ntar gini:

      • Ok thanks trik nya, skr untuk merubah titik & koma nya agar sesuai dengan format indonesia ada trik lg? Ane nyoba langsung rubah di pattern error “Malformat”. Sebenernya ane lg nyari trik untuk mmbuat format akhiran “CM” & “KG” di JFormattedTextField smpet kepikiran pke DecimalFormat ini..

  1. JFormatted? Wah, nyerah deh. Belum ngedalamin swing.
    Lagipula kalo emang akhiran cm dan kg, biasanya gak diletakin langsung di text field, tapi di luar text field sebagai label. Sorry, gak bisa bantu.

  2. bro itu kan nilai nya udah di tentuin di coding(default) kalo mau nilainya bisa di isi di luar coding gimana ya?? bantu dong please

  3. Buat yang udah reply, makasih buat kunjungannya.
    Gw seneng bisa membantu untuk urusannya masing2.

    Buat kak anonim, kak muhammad aja dan kak dony….
    Gw asli ga ngerti kenapa pada mau balikin formatted string currency itu ke angkanya lagi. Dari awal, angkanya udah ada kan?! Tinggal diambil aja angka awal, terus diproses selanjutnya…

    Contohnya… Buat program di atas, nilai awalnya ada di variabel “harga”. Jadi kalo gw butuh nilai angkanya, gw tinggal panggil aja c variabel harga buat gw olah lagi.

    Kalo memang variabel awal ini ga bisa diambil lagi… gw ngerasa aneh c yah ama program yang udah dibikin… walo memang ada caranya sendiri buat ngerubah balik. Caranya:
    1. Parse formatted String ke tipe Number pakai method parse dari objekDecimalFormat
    2. Konversi bentuk Number ke byte/double/float/long/int/short pakai byteValue/doubleValue dst.

    Cara di atas… musti gw bikinin juga jadi 1 postingan sendiri ga c? atau petunjuk di atas udah cukup?

    Buat yang pengalaman… boleh lhoh yah tambahin caranya… gw cuma tau cara yang ini soalnya. 😕

    • ya, saya berpikirnya juga begitu, gan masalahnya itu ga bisa diterapkan waktu dijalankan parse keluar eror dengan keterangan tidak bisa dirubah ke angka jadi itu koma ama titik harus di lepas dulu atau setidaknya koma yang harus dilepas dulu supaya jadi angka desimal.

      masalahnya itu saya minta karena di program lain itu bisa dijalankan tapi setahu saya di database harus berbentuk integer supaya bisa di buat hitungan matematika jadi kita pengin waktu orang isi kolom harga waktu enter berubah format decimal tapi waktu disimpan itu bisa dirubah ke integer, Gan.

    • untuk yang format rupiahnya kan yah?!
      di setText aja variabel x (cek baris kode no 18) di objek jlabelnya.

      Anggap punya objek JLabel namanya jLabel1, tinggal dibikin kode jLabel1.setText(x);

      • Eh, sorry…. salah liat listing program gw. Ga liat postingan asli.
        Buat nge-set ke JLabel, anggap ada objek JLabel namanya jLabel1… tampilin harganya pake kode

        jLabel1.setText(kursIndonesia.format(harga));

        Intinya, apa yang ditampilin di layar, pakai System.out.printf, setText aja ke objek jlabel.

Leave a comment