Rumah  >  Artikel  >  Java  >  Mengapa Menukar Terapung kepada Ganda Memperkenalkan Isu Ketepatan?

Mengapa Menukar Terapung kepada Ganda Memperkenalkan Isu Ketepatan?

Patricia Arquette
Patricia Arquetteasal
2024-11-03 08:33:30271semak imbas

Why Does Converting a Float to a Double Introduce Precision Issues?

Memelihara Ketepatan Apabila Menukar Terapung kepada Berganda

Apabila cuba menukar apungan primitif kepada berganda primitif, pengguna mungkin menghadapi percanggahan ketepatan yang tidak dijangka. Hanya melontarkan apungan kepada gandaan memperkenalkan ketepatan palsu, seperti yang digambarkan dalam contoh di bawah:

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

Walau bagaimanapun, menghuraikan apungan sebagai rentetan dan kemudian menghuraikan rentetan yang terhasil sebagai gandaan menghasilkan ketepatan yang diingini:

System.out.println(Double.toString(Double.parseDouble(Float.toString(temp))));
// Prints 14009.35

Memahami Percanggahan Ketepatan

Adalah penting untuk ambil perhatian bahawa keuntungan ketara dalam ketepatan adalah tidak tulen. Terapung tidak tepat mewakili nombor yang dimaksudkan pada mulanya. Dobel yang ditukar dengan tepat mencerminkan nilai asal terapung, manakala toString() mendedahkan ketepatan "tambahan" yang sentiasa ada tetapi tersembunyi.

Sebagai contoh, pertimbangkan senario rekaan berikut:

float f = 0.1F;
double d = f;

Dalam kes ini, nilai f boleh tepat 0.100000234523. d akan memegang nilai yang sama tetapi apabila ditukar kepada rentetan, ia akan menganggap ketepatan yang lebih tinggi dan memaparkan digit tambahan yang telah ada.

Penukaran Rentetan sebagai Penyelesaian

Menukar kepada rentetan dan belakang boleh menghasilkan nilai berganda lebih hampir kepada nombor yang dimaksudkan daripada apungan asal, tetapi penyelesaian ini sah hanya jika nilai rentetan mewakili nombor yang dikehendaki dengan tepat.

Data Alternatif Jenis Pertimbangan

Pengguna harus menilai sama ada float/double sesuai untuk kes penggunaan mereka. Jika nilai perpuluhan yang tepat diperlukan (cth., untuk pengiraan kewangan), BigDecimal mungkin jenis data yang lebih sesuai.

Atas ialah kandungan terperinci Mengapa Menukar Terapung kepada Ganda Memperkenalkan Isu 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