Papucino,
Saya tidak merekomendasikan jenis uang dan uang kecil kecuali Anda yakin bahwa satu-satunya aritmatika yang Anda rencanakan adalah penjumlahan dan pengurangan. Jika Anda mungkin berurusan dengan nilai tukar, persentase, dan sebagainya, Anda berisiko mengalami masalah nyata dengan jenis ini.
Berikut ini hanya satu contoh kecil untuk menunjukkan kepada Anda perbedaan antara menggunakan uang, desimal, dan float ketika pembagian terlibat. Anda dapat menemukan contoh di mana perbedaannya jauh lebih dramatis.
declare @m1 money, @m2 money, @m3 money
declare @d1 decimal(19,4), @d2 decimal(19,4), @d3 decimal(19,4)
declare @f1 float, @f2 float, @f3 float;
set @m1 = 1.00;
set @m2 = 345.00;
set @m3 = @m1/@m2;
set @d1 = 1.00;
set @d2 = 345.00;
set @d3 = @d1/@d2;
set @f1 = 1.00;
set @f2 = 345.00;
set @f3 = @f1/@f2;
select @m3, @d3, @f3;
Hasil:0.0028 0.0029 0.00289855072463768
Tergantung pada industrinya, mungkin ada pedoman atau peraturan untuk membantu Anda memutuskan tipe data yang tepat. Tidak ada satu jawaban yang benar.
Menambahkan komentar:
Anda benar bahwa uang/uang seharusnya bukan uang, tetapi SQL Server (tidak dapat dijelaskan) menghasilkan hasil yang persis seperti itu:ketik uang dari hasil bagi dua nilai uang. Ini palsu, tetapi seperti yang Anda lihat dari contoh di bawah, itulah yang Anda dapatkan, meskipun tidak masuk akal:
declare @m1 money, @m2 money;
declare @d1 decimal(19,4), @d2 decimal(19,4);
set @m1 = 1.00;
set @m2 = 345.00;
set @d1 = 1.00;
set @d2 = 345.00;
select @m1/@m2, @d1/@d2
Hasil:0.0028 0.0028985507246376811
Hasil dengan jenis uang, 0,0028, adalah 3-4% lebih kecil dari hasil yang benar.
Tentu saja, ada banyak situasi di mana Anda perlu membagi nilai mata uang. Bahaya menggunakan jenis uang adalah bahwa hasil bagi adalah jenis yang salah (dan jawaban tidak cukup dekat dengan yang benar). Contoh pertanyaan yang memerlukan pembagian mata uang:
Misalkan Anda menukar 320 Yuan dan bank memberi Anda 47,3 dolar AS. Berapa nilai tukar yang diberikan kepada Anda?
Misalkan Anda berinvestasi $23 dan setahun kemudian nilainya $31. Berapa persen tingkat pengembalian Anda?
Kedua perhitungan ini membutuhkan pembagian nilai mata uang.