Rumah >Java >javaTutorial >Mengapa Jenis `double` Java Menghasilkan Keputusan Tidak Tepat dalam Pengiraan Kewangan?

Mengapa Jenis `double` Java Menghasilkan Keputusan Tidak Tepat dalam Pengiraan Kewangan?

Susan Sarandon
Susan Sarandonasal
2024-12-06 12:51:14291semak imbas

Why Does Java's `double` Type Produce Inaccurate Results in Financial Calculations?

Masalah Ketepatan dengan Pengiraan Berganda Java: Kajian Kes

Cabaran timbul apabila berurusan dengan aritmetik titik terapung berketepatan dua di Jawa. Seperti yang digambarkan dalam coretan kod, penolakan nilai bulat boleh membawa kepada hasil yang tidak dijangka disebabkan oleh pengehadan ketepatan yang wujud.

Khususnya, isu ini berpunca daripada rangkaian pengiraan:

  • Komisen temp: 78.75 (bulat)
  • netToCompany: 708.74 ralat.
  • Menjinakkan Binatang Ketepatan: Memperkenalkan BigDecimal

Untuk menangani isu ketepatan ini, Java menyediakan kelas java.math.BigDecimal, yang menawarkan aritmetik perpuluhan ketepatan arbitrari .

Dalam kes ini, kod akan diubah suai sebagai berikut:

Dengan BigDecimal, hasilnya dikira dengan tepat dan dipaparkan:

import java.math.BigDecimal;

BigDecimal premium = BigDecimal.valueOf("1586.6");
BigDecimal netToCompany = BigDecimal.valueOf("708.75");
BigDecimal commission = premium.subtract(netToCompany);
System.out.println(commission + " = " + premium + " - " + netToCompany);
Kesimpulan

877.85 = 1586.6 - 708.75
Apabila berurusan dengan ketepatan-sensitif pengiraan di Jawa, adalah penting untuk memanfaatkan BigDecimal untuk mengelakkan perangkap titik terapung aritmetik. Dengan menerima keupayaan ketepatan sewenang-wenangnya, pembangun boleh memastikan hasil yang tepat dan boleh dipercayai, walaupun dalam senario kompleks seperti yang diterangkan di atas.

Atas ialah kandungan terperinci Mengapa Jenis `double` Java Menghasilkan Keputusan Tidak Tepat dalam Pengiraan Kewangan?. 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