Membuat apungan primitif kepada primitif berganda boleh menyebabkan kehilangan ketepatan yang ketara. Fenomena ini sering dikaitkan dengan ketepatan "tambahan" dua kali ganda, tetapi ia sebenarnya disebabkan oleh keupayaan terhad apungan untuk mewakili nombor tertentu dengan tepat.
Dalam contoh berikut, melontar apungan kepada dua kali menghasilkan pengenalan digit:
float temp = 14009.35F; System.out.println(Float.toString(temp)); // 14009.35 System.out.println(Double.toString((double)temp)); // 14009.349609375
Satu penyelesaian ialah menukar apungan kepada rentetan dan kemudian menghuraikan rentetan sebagai dua kali ganda, yang mengekalkan nilai asal:
System.out.println(Double.toString(Double.parseDouble(Float.toString(temp)))); // 14009.35
Adalah penting untuk ambil perhatian bahawa digit "tambahan" sebenarnya tidak ditambah oleh primitif berganda. Terapung itu tidak mewakili nombor dengan tepat. Rangkap dua dengan tepat mewakili nilai apungan asal.
Penukaran kepada rentetan dan kembali menghasilkan nilai berganda yang lebih dekat dengan perwakilan rentetan, tetapi penting untuk mengesahkan bahawa ini sebenarnya wajar.
Dalam situasi di mana nilai perpuluhan yang tepat diperlukan (cth., pengiraan kewangan), pertimbangkan untuk menggunakan jenis BigDecimal dan bukannya apungan atau berganda, kerana ia memastikan perwakilan nombor perpuluhan yang lebih tepat.
Atas ialah kandungan terperinci Mengapakah Penukaran Terapung kepada Gandaan Kadang-kadang Nampak Kehilangan Ketepatan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!