Rumah  >  Artikel  >  Java  >  Mengapa Memancarkan Terapung ke Ganda Nampaknya Mengurangkan Ketepatan?

Mengapa Memancarkan Terapung ke Ganda Nampaknya Mengurangkan Ketepatan?

DDD
DDDasal
2024-11-01 07:48:02605semak imbas

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

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

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!

Kenyataan:
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