Даже если DECIMAL
является точным числовым типом (в отличие от FLOAT
, который является приблизительным), он ведет себя довольно странно в следующем примере:
DECLARE @DECIMAL_VALUE1 DECIMAL(20,9) = 504.70 / 0.151562
DECLARE @DECIMAL_VALUE2 DECIMAL(20,0) = 504.70 / 0.151562
DECLARE @INTEGER_VALUE INT = 504.70 / 0.151562
SELECT
@DECIMAL_VALUE1 AS DECIMAL_VALUE1, -- 3329.990366978
@DECIMAL_VALUE2 AS DECIMAL_VALUE2, -- 3330
@INTEGER_VALUE AS INTEGER_VALUE -- 3329
Значение, отличное от 3329, вызывает ошибкув нашем приложении.Создание типа переменной INTEGER
решило нашу проблему, но я не могу понять, почему она была вызвана.