Angka titik-mengambang
Berlaku untuk: .NET Framework .NET .NET Standard
Topik ini menjelaskan beberapa masalah yang sering ditemui pengembang ketika mereka bekerja dengan nomor floating-point di Penyedia Data Microsoft SqlClient untuk SQL Server. Masalah ini disebabkan oleh cara komputer menyimpan angka floating-point, dan tidak spesifik untuk penyedia tertentu seperti Microsoft.Data.SqlClient.
Perangkap floating-point
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.
Solusi yang direkomendasikan
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. Dalam .NET, mengonversi ke Single Double mungkin juga menghasilkan hasil yang tidak terduga. 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.