Bagaimana Memisahkan Ganda menjadi Bagian Integer dan Desimal

1. Ikhtisar

Dalam tutorial ini, kita akan mempelajari berbagai metode untuk memisahkan bagian integer dan desimal dari tipe floating-point di Java, yaitu float dan double .

2. Masalah dengan Jenis Titik Mengambang

Mari kita mulai dengan melihat pecahan sederhana, dan cara naif melakukan pemisahan, melalui casting:

double doubleNumber = 24.04; int intPart = (int) doubleNumber; System.out.println("Double Number: " + doubleNumber); System.out.println("Integer Part: " + intPart); System.out.println("Decimal Part: " + (doubleNumber - intPart));

Saat kami mencoba menjalankan kode di atas, inilah yang kami dapatkan:

Double Number: 24.04 Integer Part: 24 Decimal Part: 0.03999999999999915

Berlawanan dengan harapan kami, keluaran tidak mencetak bagian desimal dengan benar. Oleh karena itu, angka floating-point tidak cocok untuk perhitungan di mana kesalahan pembulatan tidak dapat ditoleransi.

3. Pendekatan Pertama: Memisahkan String

Pertama-tama, mari kita ubah angka desimal menjadi string yang setara. Kemudian kita dapat membagi String pada indeks titik desimal.

Mari kita pahami ini dengan sebuah contoh:

double doubleNumber = 24.04; String doubleAsString = String.valueOf(doubleNumber); int indexOfDecimal = doubleAsString.indexOf("."); System.out.println("Double Number: " + doubleNumber); System.out.println("Integer Part: " + doubleAsString.substring(0, indexOfDecimal)); System.out.println("Decimal Part: " + doubleAsString.substring(indexOfDecimal)); 

Output dari kode diatas adalah:

Double Number: 24.04 Integer Part: 24 Decimal Part: .04

Hasilnya persis seperti yang kami harapkan. Tapi, masalahnya di sini adalah batasan menggunakan String - yang berarti kita sekarang tidak dapat melakukan operasi aritmatika lainnya.

4. Pendekatan Kedua: Menggunakan BigDecimal

Kelas BigDecimal di Java memberi penggunanya kontrol penuh atas perilaku pembulatan. Kelas ini juga menyediakan operasi untuk aritmatika, manipulasi skala, pembulatan, perbandingan, hashing, dan konversi format.

Mari gunakan BigDecimal untuk mendapatkan bagian bilangan bulat dan desimal dari bilangan floating point:

double doubleNumber = 24.04; BigDecimal bigDecimal = new BigDecimal(String.valueOf(doubleNumber)); int intValue = bigDecimal.intValue(); System.out.println("Double Number: " + bigDecimal.toPlainString()); System.out.println("Integer Part: " + intValue); System.out.println("Decimal Part: " + bigDecimal.subtract( new BigDecimal(intValue)).toPlainString());

Outputnya adalah:

Double Number: 24.04 Integer Part: 24 Decimal Part: 0.04

Seperti yang bisa kita lihat di atas, hasilnya seperti yang diharapkan. Kami juga dapat melakukan operasi aritmatika dengan bantuan metode yang disediakan di kelas BigDecimal .

5. Kesimpulan

Pada artikel ini, kita membahas berbagai metode untuk memisahkan bagian integer dan desimal dari tipe floating-point. Kami juga membahas manfaat menggunakan BigDecimal untuk penghitungan floating point.

Selain itu, tutorial mendetail kami tentang BigDecimal dan BigInteger di Java membahas lebih banyak karakteristik dan skenario penggunaan dari kedua kelas tersebut.

Terakhir, kode sumber lengkap untuk tutorial ini tersedia di GitHub.