Contoh dalam artikel ini menjelaskan metode operasi BigDecimal di java. Bagikan dengan semua orang untuk referensi Anda. Analisis spesifiknya adalah sebagai berikut:
Karena double dan float tidak cukup presisi, BigDecimal harus digunakan saat melakukan penghitungan komersial. Objek BigDecimal dibuat sebagai berikut:
Salin kode sebagai berikut: BigDecimal b = new BigDecimal("12.000001");
Sistem.keluar.println(b);
Hasil keluarannya adalah: 12.000001;
BigDecimal dapat diteruskan dalam String dan digandakan saat membuatnya, tetapi yang terbaik adalah menggunakan String. Adapun alasannya, lihat saja kode berikut:
Salin kode sebagai berikut: BigDecimal b = new BigDecimal("12.000001");
Sistem.keluar.println(b);
BigDecimal c = BigDecimal baru(12.01);
Sistem.keluar.println(c);
Hasil yang berjalan adalah:
12.000001
12.0099999999999997868371792719699442386627197265625
Dapat dilihat bahwa presisi akan hilang ketika double dimasukkan.
Operasi BigDecimal lainnya adalah sebagai berikut:
Copy kodenya sebagai berikut: //Penambahan
public static BigDecimal add(String nomor1, String nomor2) {
BigDecimal bd1 = BigDecimal baru(angka1);
BigDecimal bd2 = BigDecimal baru(angka2);
kembali bd1.tambahkan(bd2);
}
//Pengurangan
pengurangan BigDecimal public static (String nomor1, String nomor2) {
BigDecimal bd1 = BigDecimal baru(angka1);
BigDecimal bd2 = BigDecimal baru(angka2);
return bd1.kurangi(bd2);
}
//perkalian
perkalian BigDecimal public static (String nomor1, String nomor2) {
BigDecimal bd1 = BigDecimal baru(angka1);
BigDecimal bd2 = BigDecimal baru(angka2);
kembalikan bd1.multiply(bd2);
}
//divisi
pembagian BigDecimal statis publik(String nomor1, String nomor2, int i) {
BigDecimal bd1 = BigDecimal baru(angka1);
BigDecimal bd2 = BigDecimal baru(angka2);
// i adalah jumlah digit yang dipertahankan, BigDecimal.ROUND_HALF_UP mewakili aturan pembulatan
return bd1.divide(bd2, i, BigDecimal.ROUND_HALF_DOWN);
}
Penting untuk menekankan pembagian. Parameter ketiga adalah apakah akan dibulatkan.
ROUND_HALF_DOWN berarti 1 tidak akan dimasukkan ketika ditemukan 5, yaitu 1,5->1;
ROUND_HALF_UP berarti ketika 5 ditemukan, 1 dimasukkan, yaitu 1,5->2;
Namun ada beberapa hal yang perlu diperhatikan:
Saat kita menggunakan ROUND_HALF_DOWN, salin kode seperti berikut: System.out.println(this.divide("67.75", "5",4));
System.out.println(ini.divide("67.75", "5",1));
Sistem.keluar.println("-------");
System.out.println(ini.divide("67.751", "5",4));
System.out.println(ini.divide("67.751", "5",1));
Hasil yang berjalan adalah sebagai berikut:
13.5500
13.5
-------
13.5502
13.6
Saya bingung. Logikanya hasil kedua seharusnya 13,5! Mengapa menjadi 13,6? Setelah banyak pengujian, saya memikirkannya dan menemukan bahwa pembulatan ini tidak didasarkan pada pergeseran setelah angka presisi dan membandingkannya dengan 5, tetapi semua data setelah angka presisi dibandingkan dengan 5. Dengan kata lain: 13,5500 akurat untuk satu digit, lalu Gunakan 0,0500 untuk membandingkan dengan 5, dan 13,5502 akurat untuk satu digit, lalu gunakan 0,0502 untuk membandingkan dengan 5. Lebih besar dari 5, sehingga menutup ke atas.
Saya harap artikel ini bermanfaat untuk pemrograman Java semua orang.