Angka Titik-Mengambang

Topik ini menjelaskan beberapa masalah yang sering dihadapi pengembang ketika mereka bekerja dengan angka titik mengambang di ADO.NET. Masalah ini disebabkan oleh cara komputer menyimpan angka titik mengambang, dan tidak spesifik untuk penyedia tertentu seperti System.Data.SqlClient atau System.Data.OracleClient.

Angka titik mengambang umumnya tidak memiliki representasi biner yang tepat. Sebaliknya, komputer menyimpan perkiraan angka tersebut. Pada waktu yang berbeda, jumlah digit biner yang berbeda dapat digunakan untuk mewakili nomor tersebut. Ketika angka titik mengambang dikonversi dari satu representasi ke representasi lain, digit paling signifikan dari angka tersebut mungkin sedikit berbeda. Konversi biasanya terjadi ketika nomor dimunculkan dari satu jenis ke jenis lain. Variasi terjadi apakah konversi terjadi dalam database, antara jenis yang mewakili nilai database, atau antar jenis. Karena perubahan ini, angka yang secara logis akan sama mungkin memiliki perubahan dalam angka paling signifikan yang menyebabkan angka tersebut memiliki nilai yang berbeda. Jumlah digit presisi dalam angka mungkin lebih besar atau lebih kecil dari yang diharapkan. Saat diformat sebagai string, nomor tersebut mungkin tidak menunjukkan nilai yang diharapkan.

Untuk meminimalkan efek ini, Anda harus menggunakan kecocokan terdekat antara jenis numerik yang tersedia untuk Anda. Misalnya, jika Anda menggunakan SQL Server, nilai numerik yang tepat dapat berubah jika Anda mengonversi nilai Transact-SQL jenis nyata ke nilai jenis float. Di .NET Framework, mengonversi Single ke Double juga dapat menghasilkan hasil yang tidak diharapkan. Dalam kedua kasus ini, strategi yang baik adalah membuat semua nilai dalam aplikasi menggunakan jenis numerik yang sama. Anda juga bisa menggunakan jenis desimal presisi tetap, atau memasukkan angka titik mengambang ke jenis desimal presisi tetap sebelum Anda menggunakannya.

Untuk mengatasi masalah dengan perbandingan kesetaraan, pertimbangkan pengodean aplikasi Anda sehingga variasi dalam digit paling tidak signifikan diabaikan. Misalnya, daripada membandingkan untuk melihat apakah dua angka sama, kurangi satu angka dari angka lainnya. Jika perbedaannya berada dalam batas pembulatan yang dapat diterima, aplikasi Anda dapat memperlakukan angka-angka tersebut seolah-olah sama.

Lihat juga