Оба этих типа данных [money и decimal (13,40)] могут точно хранить значения с четырьмя десятичными знаками. Полные значения могут отображаться или не отображаться в зависимости от того, как настроены SSMS или пользовательский интерфейс по вашему выбору, но они есть. Эта денежная стоимость 120,45 может на самом деле быть 120,4485, и дисплей округляет ее для вас. Если нет, и если предполагается, что два значения складываются в одно, то может показаться, что вы каким-то образом получили поврежденные данные ... и это другая и более серьезная проблема.
Для округления числовых функций в T-SQL вы используете функцию ROUND
. Вот быстрый пример:
declare
@Foo1 money
,@foo2 decimal(13,4)
set @Foo1 = 66.2285
set @Foo2 = 66.2285
print @foo1
print str(@foo1, 7,4) + ' ("true value" of the money value)'
print @foo2
print ''
print round(@foo1,2)
print str(round(@foo1,2), 7,4) + ' ("true value" of the ROUNDED money value)'
print round(@foo2,2)
Вы хотите быть очень осторожными при работе с неточными значениями (т.е. требуется округление), особенно когда вы имеете дело с деньгами!