Rumah > Java > javaTutorial > teks badan

Mengapa Menukar Terapung kepada Ganda Memperkenalkan Isu Ketepatan?

Patricia Arquette
Lepaskan: 2024-11-03 08:33:30
asal
270 orang telah melayarinya

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
Salin selepas log masuk

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
Salin selepas log masuk

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;
Salin selepas log masuk

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!