Dasar Class Bigdecimal Pada Aplikasi Bisnis

Setelah sebelumnya anda mengetahui mengenai class BigInteger, maka kali ini kita akan membahas mengenai class Big Decimal. Kedua class tersebut yaitu immutable.

BigDecimal digunakan untuk perhitungan presisi perhitungan aritmatika yang tinggi. Class ini hampir sanggup dikatakan masuk ke dalam tipe class wrapper, namun mempunyai banyak sekali method yang sangat berguna.

Class ini mempunyai method ibarat saat anda melaksanakan operasi aritmatika dengan tipe-tipe primitif. Hanya saja, jikalau pada tipe primitif anda memakai operator matematika ibarat +, -, /, -, %, maka pada class BigDecimal atau BigInteger anda memakai method ibarat add, substract, multiply dan sebagainya

Disini anda menukar kecepatan dengan akurasi.

Anda sanggup memakai BigDecimal untuk perhitungan contohnya dalam hal keuangan yang memang membutuhkan presisi yang tinggi.

Ketika anda memakai Java untuk perhitungan bisnis aritmatika secara sederhana, mungkin anda sanggup terkejut alasannya yaitu Java tidak selalu menawarkan balasan yang benar. Misalnya saat tipe double digunakan untuk perhitungan invoice keuangan, mulut aritmatika mungkin tidak menawarkan akurasi yang tepat.


Alasan sesungguhnya yaitu angka floating-point tidak sanggup merepresentasikan semua desimal dengan akurasi yang diperlukan. Kemudian saat anda melaksanakan pembulatan menjadi dua angka dibelakang koma, maka ini sanggup terjadi error.

Baca juga:
Class NumberFormat
Class BigInteger
Class DecimalFormat

Masalah Pada Angka Desimal  Dan Pembulatan


Perhatikan pola aktivitas invoice di bawah ini, di mana saat tipe data double yang digunakan tidak menawarkan hasil yang akurat untuk perhitungan keuangan. Pajak penjualan yaitu 5% atau 0.05 dari harga barang dan jikalau nilai pembelian di atas $100 maka akan mendapat diskon 10 % atau 0.1 dari harga barang.

Contoh output:

Bisa dilihat dari pola output di atas, saat user memasukkan subtotal 150.50, aktivitas menawarkan hasil yang tepat.

Namun, duduk kasus terjadi saat user memasukkan subtotal 100.05, total sebelum pajak yaitu $90.04 padahal seharusnya $90.05. Demikian juga saat user memasukkan subtotal 0.7, aktivitas menawarkan hasil pajak penjualan $0.03, dan seharusnya subtotal menjadi $0.73, tetapi aktivitas menawarkan hasil $0.74.

Makara apa duduk kasus yang terjadi di sini? Apakah aktivitas tidak berjalan dengan semestinya?

 Setelah sebelumnya anda mengetahui mengenai class BigInteger Dasar Class BigDecimal Pada Aplikasi Bisnis


Perhatikan pada nilai yang yang dimasukkan user yaitu 100.05, dari sini anda sanggup dengan gampang mengetahui penyebabnya. Ini dikarenakan bagaimana NumberFormat bekerja, jumlah diskon $10.005 dan juga total sebelum pajak $90.045 tidak dibulatkan ke atas.

Pada output aktivitas terlihat bahwa total sebelum pajak yaitu $90.04 dan pajak penjualan $4.50, dan subtotal $94.55. Seperti terlihat aktivitas ini tidak menjumlahkan dengan benar.

Dari sini anda sanggup mengetahui bahwa sesungguhnya aktivitas berjalan sebagaimana mestinya, walaupun menawarkan hasil yang tidak diinginkan.

Sekarang coba lihat juga pada nilai 0.70 yang dimasukan user, seharusnya pajak penjualan yaitu $0.035 namun output memperlihatkan $0.03, ini terjadi alasannya yaitu angka floating-point tidak merepresentasikan dengan sempurna untuk beberapa fraksi desimal.

Sebagai hasilnya, nilai yang diformat $0.03 seharusnya dibulatkan menjadi $0.04. Namun, total invoice yang ditunjukkan yaitu benar di $0.74. Wow, jadi tampaknya aktivitas ini tidak sanggup menghitung ya? Lihat juga jikalau dihitung menurut jumlah jumlah masing-masing subtotal yang ditampilkan, harusnya total invoice yaitu $237.51, namun outpout yaitu $237.50.

Meskipun error ibarat ini sanggup diterima dalam kebanyakan aplikasi, namun ini tidak akan sanggup diterima dalam aplikasi bisnis. Dan untuk aplikasi ibarat ini, anda perlu untuk menyediakan pemecahan duduk kasus untuk sanggup menawarkan hasil yang anda inginkan. Coba bayangkan bagaimana jadinya jikalau memakai aktivitas invoice yang tidak sanggup melaksanakan pembulatan ke atas.

Salah satu solusi mungkin yaitu dengan menulis instruksi tanpa pembulatan sehingga anda tidak memerlukan class NumberFormat untuk melaksanakan pembulatan tersebut. Namun, faktanya beberapa fraksi desimal tidak sanggup secara akurat direpresentasikan oleh angka floating-point.

Makara untuk memecahkan duduk kasus tersebut juga pada data yang lainnya, solusi terbaik yaitu memakai class BigDecimal.

Menggunakan BigDecimal

Class BigDecimal didesain untuk mengatasi 2 masalah, yaitu:

  • Untuk merepresentasikan angka desimal dengan tepat.
  • Digunakan untuk bekerja dengan angka yang mempunyai lebih dari 16 digit signifikan.

Jika anda belum pernah memakai class ini sebelumnya, sebaiknya dipelajari dan diperdalam, alasannya yaitu class ini banyak digunakan dalam aplikasi bisnis.

Setelah anda menciptakan objek BigDecimal, maka anda sanggup memakai method pada objek tersebut.

Beberapa method yang sering digunakan adalah:

  • add(value)
  • compareTo(value)
  • divide(value, scale, rounding-mode)
  • setScale(scale, rounding-mode)
  • substract(value)
  • toString()

Method toString() akan mengkonversi nilai dari objek BigDecimal menjadi sebuah string. Anda sanggup memakai method compareTo() untuk membandingkan nilai dalam objek BigDecimal.

Method setScale() juga sangat penting alasannya yaitu digunakan untuk memilih junmlah dari angka desimal dari sebuah nilai dari objek BigDecimal sebagaimana juga digunakan dalam mode pembulatan.

Contoh mengatur desimal menjadi dua angka:

pajakPenjualan = pajakPenjualan.setScale (2, RoundingMode.HALF_UP);
dalam hal ini RoundingMode yaitu enumerasi. Aplikasi bisnis kebanyakan memakai HALF_UP untuk mode pembulatannya. Namun, sebelum sanggup menggunakannya, anda harus meng-importnya terlebih dahulu.

Berikut ini yaitu pola aktivitas invoice yang memakai BigDecimal:


Output:



Dari kedua ouput tersebut di atas anda sanggup membandingkan saat tanpa memakai BigDecimal dan sehabis menggunakannya.

Dengan instruksi yang gres ini, semua nilai hasil disimpan dalam objek BigDecimal dan semua hasil mempunyai dua angka desimal dan pembulatan telah dilakukan dengan benar saat dibutuhkan.

Ketika hasil dikalkulasi, anda sanggup memakai method NumberFormat untuk melaksanakan format pada nilai dalam objek BigDecimal tersebut tanpa perlu merasa khawatir dengan duduk kasus pada pembulatan. Tapi, method dari objek NumberFormat hanya membatasi hasil hingga 16 digit signifikan saja.

Belum ada Komentar untuk "Dasar Class Bigdecimal Pada Aplikasi Bisnis"

Posting Komentar

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel