Saya telah melihat desimal digunakan sebagai ganti int/long dalam berbagai contoh. Saya hanya mencoba memahami alasannya
Itu mungkin karena .NET decimal
dan Oracle NUMBER
memetakan sedikit lebih baik daripada long
dan NUMBER
dan juga memberi Anda lebih banyak fleksibilitas. Jika Anda di tahap selanjutnya menambahkan skala di kolom Oracle maka Anda tidak perlu mengubah tipe data jika Anda sudah menggunakan decimal
.
decimal
tentu lebih lambat dari int
dan long
karena dua yang terakhir didukung dalam perangkat keras. Yang mengatakan, Anda harus mengolah sejumlah data yang serius agar dapat membuat perbedaan. Saya masih berpikir bahwa Anda harus menggunakan long
jika itu yang Anda hadapi dan kemudian Anda juga harus membiarkan definisi kolom tabel mewakili itu. NUMBER(18,0)
untuk long
dan seterusnya.
Alasan decimal
memetakan sedikit lebih baik adalah long
adalah 64 bit dan decimal
adalah (semacam) 128 bit.
.NET
Jenis:desimal
Rentang Perkiraan:±1,0 × 10^−28 hingga ±7,9 × 10^28
Presisi:28-29 digit signifikanJenis:panjang
Rentang:–9.223.372.036.854.775.808 hingga 9.223.372.036.854.775.807
Presisi:18 (19 untuk ulong) digit signifikan
Oracle
NUMBER
default ke 38 digit signifikan dan skala 0 (bilangan bulat).
Jenis:NUMBER
Rentang:+- 1 x 10^-130 hingga 9,99...9 x 10^125
Presisi:38 digit signifikan
Microsoft mengetahui masalahnya dan mencatat
Tipe data ini adalah alias untuk tipe data NUMBER(38), dan dirancang agar OracleDataReader mengembalikan System.Decimal atau OracleNumber sebagai ganti nilai integer. Menggunakan tipe data .NETFramework dapat menyebabkan overflow.
Kalau dipikir-pikir, Anda sebenarnya membutuhkan BigInteger
untuk dapat mewakili jumlah angka penting yang sama dengan NUMBER
default ke. Saya belum pernah melihat orang melakukan itu dan saya kira itu adalah kebutuhan yang sangat langka. Juga BigInteger
masih tidak mau memotongnya sejak NUMBER
dapat berupa tak terhingga positif dan negatif.