pertanyaan:
Saat melakukan operasi pada dua jenis nilai ganda, kadang -kadang akan ada masalah dengan nilai hasil yang abnormal. Misalnya:
System.out.println (19.99+20); System.out.println (1.0-0.66); System.out.println (0,033*100); System.out.println (12.3/100);
Keluaran:
39.98999999999999999995
0.3399999999999999999997
3.3000000000000000003
0.123000000000000001
Larutan:
Jenis titik mengambang sederhana mengambang dan ganda dalam Java tidak dapat melakukan operasi karena itu normal dalam kebanyakan kasus, tetapi kadang -kadang masalah seperti yang ditunjukkan di atas terjadi. Masalah ini sebenarnya bukan bug di java, karena komputer itu sendiri biner, dan bilangan titik mengambang sebenarnya hanyalah perkiraan nilai. Oleh karena itu, ketika dikonversi dari biner ke bilangan titik mengambang desimal, akurasinya mudah hilang, menghasilkan penurunan akurasi.
Untuk memastikan akurasi, Anda harus menggunakan kelas BigDecimal, dan Anda tidak dapat secara langsung mengonversi dari ganda ke BigDecimal. Anda harus mengonversi double menjadi string dan kemudian BigDecimal. Artinya, Anda tidak dapat menggunakan metode BigDecimal (Double Val), dan Anda akan menemukan bahwa tidak ada efeknya. Untuk menggunakan metode BigDecimal (String Val). Contoh spesifik ditunjukkan di bawah ini.
Contoh empat operasi tipe ganda:
1. Tambah
public static double add (ganda A1, double b1) {BigDecimal a2 = BigDecimal baru (double.tostring (A1)); BigDecimal B2 = BigDecimal baru (Double.ToString (B1)); return a2.add (b2) .doublevalue (); }2. Pengurangan
public static double sub (double A1, double b1) {bigdecimal a2 = new BigDecimal (double.tostring (a1)); BigDecimal B2 = BigDecimal baru (Double.ToString (B1)); return a2.subtract (b2) .doublevalue (); }3. Gandakan
Public Static Double MUL (Double A1, Double B1) {BigDecimal A2 = BigDecimal baru (Double.ToString (A1)); BigDecimal B2 = BigDecimal baru (Double.ToString (B1)); return a2.multiply (b2) .doublevalue (); }4. Dekomposisi
public static double div (ganda A1, double b1, skala int) {if (skala <0) {lempar baru ilegalargumentException ("error"); } BigDecimal A2 = BigDecimal baru (double.tostring (A1)); BigDecimal B2 = BigDecimal baru (Double.ToString (B1)); return a2.divide (b2, skala, bigdecimal.round_half_up) .doublevalue (); }Ketika parameter skala dibagi menjadi tidak lengkap, tentukan keakuratannya.
Solusi untuk hasil operasi abnormal tipe ganda di java adalah semua konten yang saya bagikan dengan Anda. Saya harap Anda dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.