Ya saya suka MONEY
! Ini satu byte lebih murah daripada DECIMAL
, dan komputasi berkinerja lebih cepat karena (di bawah penutup) operasi penambahan dan pengurangan pada dasarnya operasi integer. Contoh @ SQLMenace — yang merupakan peringatan besar bagi yang tidak sadar — bisa juga diterapkan pada INT
egers, di mana hasilnya akan nol. Tapi itu bukan alasan untuk tidak menggunakan bilangan bulat— jika perlu .
Jadi, sangat 'aman' dan tepat untuk digunakan MONEY
ketika apa yang Anda hadapi adalah MONEY
dan menggunakannya sesuai dengan aturan matematika yang diikuti (sama sepertiINT
eger).
Apakah lebih baik jika SQL Server mempromosikan pembagian dan perkalian dari MONEY
menjadi DECIMAL
s (atau FLOAT
s?) - mungkin, tetapi mereka tidak memilih untuk melakukan ini; mereka juga tidak memilih untuk mempromosikan INT
eger FLOAT
ketika membaginya.
MONEY
tidak memiliki masalah presisi; bahwaDECIMAL
dapat memiliki tipe perantara yang lebih besar yang digunakan selama perhitungan hanyalah 'fitur' dari penggunaan tipe itu (dan saya tidak benar-benar yakin seberapa jauh 'fitur' itu meluas).
Untuk menjawab pertanyaan spesifik, "alasan kuat"? Nah, jika Anda ingin kinerja maksimum absolut di suatu SUM(x)
tempat x
bisa jadi DECIMAL
atau MONEY
, makaMONEY
akan memiliki keunggulan.
Juga, jangan lupa itu sepupu yang lebih kecil, SMALLMONEY
—hanya 4 byte, tapi maks214,748.3647
— yang cukup kecil untuk uangnya — dan karenanya sering kali tidak cocok.
Untuk membuktikan titik sekitar menggunakan tipe perantara yang lebih besar, jika Anda menetapkan perantara secara eksplisit ke variabel, DECIMAL
menderita masalah yang sama:
declare @a decimal(19,4)
declare @b decimal(19,4)
declare @c decimal(19,4)
declare @d decimal(19,4)
select @a = 100, @b = 339, @c = 10000
set @d = @a/@b
set @d = @d*@c
select @d
Menghasilkan 2950.0000
(oke, jadi setidaknya DECIMAL
bulat daripada MONEY
terpotong — sama seperti integer.)
DECIMAL(19, 4)
adalah pilihan yang populer periksa ini juga periksa di sini Format Mata Uang Dunia untuk memutuskan berapa banyak tempat desimal yang digunakan, semoga membantu.