Vâng, tôi thích MONEY
! Đó là một byte rẻ hơn DECIMAL
và các tính toán thực hiện nhanh hơn bởi vì (dưới vỏ bọc) các phép toán cộng và trừ về cơ bản là các phép toán số nguyên. Ví dụ của SQLMenace là một cảnh báo tuyệt vời cho việc không biết rằng có thể áp dụng tương tự cho các INT
ví dụ, trong đó kết quả sẽ bằng không. Nhưng đó không phải là lý do để không sử dụng số nguyên mà phù hợp .
Vì vậy, nó hoàn toàn 'an toàn' và phù hợp để sử dụng MONEY
khi những gì bạn đang giải quyết MONEY
và sử dụng nó theo các quy tắc toán học mà nó tuân theo (giống như INT
eger).
Sẽ tốt hơn nếu SQL Server thúc đẩy sự phân chia và nhân của MONEY
s thành DECIMAL
(hoặc FLOAT
s?) - có thể, nhưng họ đã không chọn làm điều này; họ cũng không chọn quảng bá INT
cho người khác đến FLOAT
s khi chia chúng.
MONEY
không có vấn đề chính xác; việc DECIMAL
có một loại trung gian lớn hơn được sử dụng trong quá trình tính toán chỉ là một 'tính năng' của việc sử dụng loại đó (và tôi thực sự không chắc chắn rằng 'tính năng' đó kéo dài bao xa).
Để trả lời câu hỏi cụ thể, một "lý do thuyết phục"? Chà, nếu bạn muốn hiệu suất tối đa tuyệt đối ở một SUM(x)
nơi x
có thể DECIMAL
hoặc MONEY
, thì MONEY
sẽ có lợi thế.
Ngoài ra, đừng quên người anh em họ nhỏ hơn, điều SMALLMONEY
chỉnh 4 byte, nhưng nó tối đa hóa ở mức 214,748.3647
- khá nhỏ đối với tiền ăn tiền và vì vậy thường không phù hợp.
Để chứng minh điểm xung quanh bằng cách sử dụng các loại trung gian lớn hơn, nếu bạn chỉ định rõ ràng trung gian cho một biến, thì cũng DECIMAL
gặp phải vấn đề tương tự:
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
Sản xuất 2950.0000
(được, vì vậy, ít nhất là DECIMAL
được làm tròn chứ không phải MONEY
cắt ngắn giống như một số nguyên.)
DECIMAL(19, 4)
là một lựa chọn phổ biến, kiểm tra cái này cũng kiểm tra ở đây Định dạng tiền tệ thế giới để quyết định sử dụng bao nhiêu số thập phân, hy vọng sẽ giúp.