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 floatdan doubleprimitif 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 doublejenisnya 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 doublerepresentasi 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, longjenis 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.399999999999sebagai 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 BigDecimalkelas:
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 .