Semasa menulis kod, kita semua melakukan pelbagai kesilapan yang membawa kita kepada ralat seperti ralat limpahan dan ralat sintaks adalah salah satu ralat biasa yang mungkin mengakibatkan penyelesaian yang salah untuk masalah matematik yang diberikan ralat berlaku apabila kita bekerja dengan nombor titik terapung.
Dalam artikel ini, kami akan meneroka punca masalah ini dan cuba mencari jalan untuk menghilangkan ralat ini.
Ia juga dipanggil nombor nyata dan digunakan apabila pengiraan memerlukan nilai pecahan. Ia mewakili nombor dengan titik perpuluhan. Sebagai contoh, untuk menyatakan hasil 1/5, iaitu 0.2, keputusan sinus dan kosinus juga memerlukan titik perpuluhan.
Di Jawa, terdapat dua jenis nombor titik terapung -
Titik terapung - Ia boleh menyimpan nilai ketepatan tunggal sehingga 32 bit. Kami mengisytiharkannya menggunakan kata kunci 'float'.
Double − Saiznya lebih besar daripada terapung dan boleh menyimpan nilai ketepatan berganda sehingga 64 bit. Ia diisytiharkan menggunakan kata kunci 'double'.
Mari kita bincangkan contoh di mana kita mungkin menghadapi ralat pembulatan dan kemudian kita akan memahami sebabnya dan memberikan penyelesaian untuk mengendalikannya dengan betul.
public class Main{ public static void main(String[] args) { double data1 = 0.30; double data2 = 0.20 + 0.10; System.out.println("Value after addition: " + data2); System.out.println(data1 == data2); double data3 = 0.50; double data4 = 0.10 + 0.10 + 0.10 + 0.10 + 0.10; System.out.println("Value after addition: " + data4); System.out.println(data3 == data4); } }
Value after addition: 0.30000000000000004 false Value after addition: 0.5 true
Dalam kod di atas, apabila kita menambahnya buat kali pertama, nilai jangkaan 'data2' ialah 0.30, tetapi hasil output adalah salah. Walau bagaimanapun, apabila kami melakukan operasi penambahan serupa yang lain, kami mendapat hasil yang tepat.
Mari kita ambil contoh lain yang menunjukkan ralat.
Terjemahan bahasa Cina bagipublic class Main { public static void main(String[] args) { double data1 = 4.30452; double data2 = 0.503542; double res = data1 + data2; System.out.println("Value after addition: " + res); } }
Value after addition: 4.8080620000000005
Keluaran yang dijangkakan ialah 4.808062, tetapi kami mendapat output yang salah di sini.
'IEEE 754' ialah standard yang diikuti oleh Java semasa melaksanakan nombor titik terapung Menurut peraturan 'Pembulatan'nya, apabila daripada nilai mantissa lebih besar daripada 23 bit maka ia menambah 1 kepada bit ke-23 untuk membundarkan nilai. . Di sini, mantissa ialah perwakilan binari bagi digit pecahan.
Sebab itu kita dapat nilai yang berbeza.
Untuk mengelakkan ralat pembundaran ini, kami mempunyai kaedah berikut -
Contoh berikut menunjukkan cara kita boleh menggunakannya untuk menghasilkan keputusan yang tepat.
import java.math.*; public class Main{ public static void main(String[] args) { BigDecimal data1 = new BigDecimal("0.20"); BigDecimal data2 = new BigDecimal("0.10"); BigDecimal res = data1.add(data2); // performing addition System.out.println("Value after addition: " + res); } }
Output
Value after addition: 0.30
Contoh di bawah menggambarkan penggunaannya dalam program.
public class Main { public static void main(String[] args) { double data1 = 4.30452; double data2 = 0.503542; double res = data1 + data2; System.out.println("Value after addition: " + res); System.out.println("Value after rounding off the addition: " + Math.round(res)); } }
Output
Value after addition: 4.8080620000000005 Value after rounding off the addition: 5
Atas ialah kandungan terperinci Ralat pembulatan dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!