Rumah > Java > javaTutorial > teks badan

Mengapa Memancarkan Terapung ke Ganda Nampaknya Mengurangkan Ketepatan?

DDD
Lepaskan: 2024-11-01 07:48:02
asal
683 orang telah melayarinya

Why Does Casting a Float to a Double Seem to Reduce Precision?

Memelihara Ketepatan Apabila Menukar Terapung kepada Berganda

Dalam senario tertentu, hanya melontarkan apungan kepada dua kali boleh mengakibatkan ketepatan yang kelihatan tidak betul. Tingkah laku yang tidak dijangka ini bukan disebabkan oleh gandaan mempunyai kejituan yang meningkat tetapi sebaliknya kerana ketepatan apungan tidak menggambarkan nilai yang dimaksudkan dengan tepat.

Untuk memahami konsep ini, pertimbangkan contoh:

float temp = 14009.35F;
System.out.println(Float.toString(temp)); // Prints 14009.35
System.out.println(Double.toString((double)temp)); // Prints 14009.349609375
Salin selepas log masuk

Walaupun perwakilan rentetan apungan nampaknya mempunyai ketepatan yang diingini, perwakilan rentetan berganda dengan tepat memaparkan nilai yang disimpan dalam apungan. Perbezaan timbul kerana nilai dalaman apungan tidak pernah benar-benar 14009.35 tetapi lebih hampir kepada 14009.349609375. Menghantar apungan kepada dua kali ganda semata-mata mendedahkan ketepatan asas.

Menukar kepada rentetan dan belakang mungkin kelihatan seperti penyelesaian yang berdaya maju, kerana nampaknya mengekalkan ketepatan yang diingini:

System.out.println(Double.toString(Double.parseDouble(Float.toString(temp)))); // Prints 14009.35
Salin selepas log masuk

Walau bagaimanapun , pendekatan ini memperkenalkan isu yang berpotensi. Jika perwakilan rentetan tidak benar-benar tepat, dua kali ganda yang terhasil masih tidak tepat, walaupun dengan ketepatan yang berbeza.

Oleh itu, adalah penting untuk menilai kesesuaian penggunaan apungan dan dua kali ganda untuk keperluan angka tertentu. Dalam kes di mana nilai perpuluhan yang tepat diperlukan, BigDecimal mungkin merupakan pilihan yang lebih sesuai. BigDecimal membolehkan ketepatan sewenang-wenangnya, menghapuskan kemungkinan perangkap apungan dan had perwakilan berganda.

Atas ialah kandungan terperinci Mengapa Memancarkan Terapung ke Ganda Nampaknya Mengurangkan Ketepatan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan