Mengapa Bukan double untuk Uang
Masalah presisi titik mengambang
Mengapa Bukan double untuk Uang adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.
Nilai Bawaan yang Berbahaya
Menyimpan harga dalam double terasa alami. Sayangnya, double tidak dapat merepresentasikan sebagian besar pecahan desimal secara tepat, sehingga menimbulkan kesalahan kecil yang merusak perhitungan keuangan.
Kejutan Klasik
Jumlahkan 0.1 dan 0.2 dengan double, dan hasilnya bukan 0.3. Anda akan mendapatkan nilai dengan kesalahan pembulatan kecil.
public class Main {
public static void main(String[] args) {
double result = 0.1 + 0.2;
System.out.println(result);
}
}Mengapa Ini Terjadi
Komputer menyimpan double dalam bentuk biner. Sama seperti sepertiga yang tidak dapat dituliskan secara tepat dalam desimal, banyak bilangan desimal seperti 0.1 yang tidak dapat dituliskan secara tepat dalam biner.
Pendekatan biner terdekat yang disimpan, dan kesalahannya terus bertambah.
Kesalahan Terus Bertambah
Satu kesalahan kecil mungkin tampak tidak berbahaya, tetapi dalam perulangan yang memproses ribuan transaksi, perbedaan tersebut terakumulasi menjadi kesalahan yang terlihat.
public class Main {
public static void main(String[] args) {
double total = 0.0;
for (int i = 0; i < 10; i++) {
total += 0.1;
}
System.out.println(total);
}
}Kesetaraan yang Gagal
Karena kesalahan pembulatan, membandingkan nilai double hasil perhitungan dengan == sering gagal ketika Anda mengharapkan keduanya sama.
public class Main {
public static void main(String[] args) {
double a = 0.1 + 0.2;
double b = 0.3;
System.out.println(a == b);
}
}Uang Membutuhkan Ketepatan
Dalam keuangan, kesalahan sebesar pecahan satu sen tidak dapat diterima. Auditor mengharapkan jumlah total cocok hingga ke satuan sen.
Itulah sebabnya uang tidak boleh disimpan sebagai tipe titik mengambang.
Solusinya: BigDecimal
Java menyediakan BigDecimal, sebuah kelas yang menyimpan bilangan desimal secara tepat. Kelas ini melacak nilai tanpa skala dan scale secara terpisah, sehingga 0.1 benar-benar berarti 0.1.
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal a = new BigDecimal("0.1");
BigDecimal b = new BigDecimal("0.2");
System.out.println(a.add(b));
}
}Selalu Gunakan Konstruktor Teks
Buat BigDecimal dari teks, bukan dari double. Meneruskan sebuah double akan membawa kesalahan biner ke dalam BigDecimal.
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal fromDouble = new BigDecimal(0.1);
BigDecimal fromString = new BigDecimal("0.1");
System.out.println(fromDouble);
System.out.println(fromString);
}
}Atau Gunakan valueOf
BigDecimal.valueOf adalah cara pintas yang aman. Cara ini mengonversi double menggunakan bentuk teks kanonisnya, sehingga menghindari kesalahan biner mentah.
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal price = BigDecimal.valueOf(19.99);
System.out.println(price);
}
}Menyimpan Uang sebagai Sen
Alternatif untuk kasus sederhana adalah menyimpan uang sebagai bilangan bulat berupa jumlah sen, menggunakan long. Dengan demikian, 19.99 dolar menjadi 1999 sen dan semua perhitungannya merupakan perhitungan bilangan bulat yang tepat.
public class Main {
public static void main(String[] args) {
long cents = 1999;
long total = cents * 3;
System.out.println(total + " cents");
}
}Intinya
Gunakan float dan double untuk pekerjaan ilmiah dan grafis yang masih dapat menerima kesalahan kecil. Untuk uang dan nilai apa pun yang harus tepat, gunakan BigDecimal atau jumlah sen dalam bilangan bulat.
Pemeriksaan Singkat
Uji pemahaman Anda tentang presisi titik mengambang.
Ringkasan
Anda telah mempelajari alasan double tidak cocok untuk uang:
- Titik mengambang biner tidak dapat menyimpan banyak bilangan desimal secara tepat
- Kesalahan seperti
0.1 + 0.2yang tidak sama dengan 0.3 akan terakumulasi - Gunakan
BigDecimaluntuk aritmetika desimal yang tepat - Buat dari teks atau dengan
valueOf, jangan pernah dari double mentah - Menyimpan jumlah sen sebagai bilangan bulat adalah pilihan tepat lainnya
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mengapa Bukan double untuk Uang” gratis?
Ya — teks lengkap “Mengapa Bukan double untuk Uang” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Mengapa Bukan double untuk Uang”?
Masalah presisi titik mengambang Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Java Academy?
Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Mengapa Bukan double untuk Uang” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mengapa Bukan double untuk Uang
- Bekerja dengan BigDecimal
- Pembulatan dan Skala
- BigInteger untuk Bilangan Besar