Seperti yang disebutkan orang lain, Anda mungkin ingin menggunakan BigDecimal
kelas, jika Anda ingin memiliki representasi 11.4.
Sekarang, sedikit penjelasan mengapa ini terjadi:
The float
dan double
primitif jenis di Jawa floating point nomor, di mana jumlah disimpan sebagai representasi biner dari fraksi dan eksponen a.
Lebih khusus lagi, nilai floating point presisi ganda seperti double
jenisnya adalah nilai 64-bit, di mana:
- 1 bit menunjukkan tanda (positif atau negatif).
- 11 bit untuk eksponen.
- 52 bit untuk digit signifikan (bagian pecahan sebagai biner).
Bagian-bagian ini digabungkan untuk menghasilkan double
representasi suatu nilai.
(Sumber: Wikipedia: Presisi ganda )
Untuk uraian terperinci tentang bagaimana nilai-nilai titik mengambang ditangani di Jawa, lihat Bagian 4.2.3: Jenis Titik Apung, Format, dan Nilai Spesifikasi Bahasa Jawa.
The byte
, char
, int
, long
jenis yang fixed-point nomor, yang representions yang tepat dari angka. Tidak seperti angka titik tetap, angka titik mengambang akan beberapa kali (aman untuk menganggap "sebagian besar waktu") tidak dapat mengembalikan representasi angka yang tepat. Ini adalah alasan mengapa Anda berakhir dengan 11.399999999999
sebagai hasil dari 5.6 + 5.8
.
Saat membutuhkan nilai yang tepat, seperti 1.5 atau 150.1005, Anda akan ingin menggunakan salah satu tipe titik tetap, yang akan dapat mewakili angka dengan tepat.
Seperti yang telah disebutkan beberapa kali, Java memiliki a BigDecimal
kelas yang akan menangani jumlah yang sangat besar dan jumlah yang sangat kecil.
Dari Referensi Java API untuk BigDecimal
kelas:
Angka desimal bertanda arbitrer dan presisi sewenang-wenang. BigDecimal terdiri dari nilai unscaled integer presisi sewenang-wenang dan skala integer 32-bit. Jika nol atau positif, skala adalah jumlah digit di sebelah kanan titik desimal. Jika negatif, nilai unscaled dari angka dikalikan sepuluh dengan kekuatan negasi skala. Nilai angka yang diwakili oleh BigDecimal karenanya (unscaledValue × 10 ^ -scale).
Ada banyak pertanyaan tentang Stack Overflow terkait dengan masalah angka floating point dan ketepatannya. Berikut adalah daftar pertanyaan terkait yang mungkin menarik:
Jika Anda benar-benar ingin pergi ke detail seluk beluk nomor floating point, lihat Apa Yang Setiap Ilmuwan Komputer Harus Tahu Tentang Aritmatika Floating-Point .