У меня проблема при обновлении целочисленной переменной со значением с плавающей запятой.При обновлении значение «100» меняется на «99».
DECLARE @intResultado INTEGER=NULL
DECLARE @dblResultado FLOAT=NULL
DECLARE @dblValorMercado FLOAT =15700123654.8047
DECLARE @intCambioTasaInteres INTEGER=100
SET @intResultado=SUM(@dblValorMercado * @intCambioTasaInteres) / SUM(CASE WHEN @dblValorMercado = 0 THEN NULL ELSE @dblValorMercado END)
SET @dblResultado=SUM(@dblValorMercado * @intCambioTasaInteres) / SUM(CASE WHEN @dblValorMercado = 0 THEN NULL ELSE @dblValorMercado END)
SELECT '1. Operation result =' AS [Result], SUM(@dblValorMercado * @intCambioTasaInteres) / SUM(CASE WHEN @dblValorMercado = 0 THEN NULL ELSE @dblValorMercado END) AS [Operation], 'GOOD' AS EVAL
UNION
SELECT '2. Integer operation result =',@intResultado, 'BAD'
UNION
SELECT '3. Float operation result = ',@dblResultado, 'GOOD'
Это результат:
Result Operation EVAL
------------------------------ ---------------------- ----
1. Original operation result = 100 GOOD
2. Integer operation result = 99 BAD
3. Float operation result = 100 GOOD
(3 row(s) affected)
Произведенный расчет представляет собой «сумму средневзвешенных значений»,который в этом случае соответствует только 1 значению (в данном случае 100), но это может быть n значений, которые будут использоваться для выполнения суммы взвешенных средних.
Проблема может быть решена путем изменения переменной INTк переменной FLOAT, но это не идея.Но чтобы выяснить, почему значение 100 во время обновления становится значением 99 и как это сделать, чтобы правильное значение 100 обновлялось с помощью переменной INT.
Спасибо