Rumah  >  Artikel  >  Java  >  Mengapa Pendaraban dalam Java Menghasilkan Keputusan Yang Tidak Dijangka Apabila Berurusan dengan Nombor Besar?

Mengapa Pendaraban dalam Java Menghasilkan Keputusan Yang Tidak Dijangka Apabila Berurusan dengan Nombor Besar?

Linda Hamilton
Linda Hamiltonasal
2024-11-06 17:27:02360semak imbas

Why Does Multiplication in Java Produce Unexpected Results When Dealing with Large Numbers?

Memahami Hasil Pendaraban dan Jenis Data dalam Java

Dalam Java, hasil operasi pendaraban bergantung pada jenis data operan. Ini amat jelas apabila mendarab nilai yang besar, seperti yang digambarkan oleh contoh kod berikut:

long oneYearWithL = 1000 * 60 * 60 * 24 * 365L;
long oneYearWithoutL = 1000 * 60 * 60 * 24 * 365;
System.out.println(oneYearWithL); // Output: 31536000000
System.out.println(oneYearWithoutL); // Output: 1471228928

Penjelasan:

  • oneYearWithL: Dengan menambahkan 'L' pada penghujung nombor, kami secara eksplisit menentukan jenis data selama ini. Ini memastikan bahawa hasilnya disimpan dalam integer panjang 64-bit, yang boleh memegang nilai yang sangat besar. Oleh itu, hasil darab adalah betul dan bersamaan dengan 3,153,600,000 milisaat (atau tahun).
  • satuTahunTanpaL: Apabila kita meninggalkan 'L', operan dianggap sebagai integer 32-bit. Hasil pendaraban integer ini melimpahi julat integer, menghasilkan nilai yang salah: 1,471,228,928.

Memahami Limpahan Integer:

Dalam Java, integer ditandatangani nilai 32-bit, antara -2,147,483,648 hingga 2,147,483,647. Apabila hasil operasi aritmetik melebihi had ini, ia melilit ke bahagian bertentangan julat, menyebabkan limpahan integer.

Dalam contoh kita, hasil darab 1000 60 60 24 365 ialah 2,592,000,000. Memandangkan nilai ini melebihi nilai integer maksimum, nilai ini membungkus kepada -1,702,967,297, iaitu apa yang kita lihat sebagai output (1,471,228,928).

Menukar kepada Jenis Data Panjang:

Untuk mengelakkan limpahan integer, anda dinasihatkan untuk menggunakan jenis data yang panjang untuk pengiraan berangka yang besar. Dengan menyatakan 'L' secara eksplisit selepas nombor, kami boleh memaksa Java untuk menganggap nilai sebagai integer panjang, memastikan bahawa hasilnya disimpan dalam pembolehubah panjang 64-bit.

Amalan Terbaik:

  • Gunakan jenis data panjang untuk nilai berangka yang besar.
  • Berhati-hati dengan potensi limpahan integer dan gunakan panjang atau BigInteger mengikut kesesuaian.
  • Pertimbangkan untuk menggunakan terapung -titik nombor untuk pengiraan yang sangat besar atau perpuluhan.

Atas ialah kandungan terperinci Mengapa Pendaraban dalam Java Menghasilkan Keputusan Yang Tidak Dijangka Apabila Berurusan dengan Nombor Besar?. 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