У меня проблема с точностью сервера sql.
У меня есть следующие запросы:
DECLARE @A numeric(30,10)
DECLARE @B numeric(30,10)
SET @A = 20.225
SET @B = 53.3875
SELECT @A * @B
DECLARE @A1 numeric(30,14)
DECLARE @B1 numeric(30,14)
SET @A1 = 20.225
SET @B1 = 53.3875
SELECT @A1 * @B1
DECLARE @A3 numeric(30,15)
DECLARE @B3 numeric(30,15)
SET @A3 = 20.225
SET @B3 = 53.3875
SELECT @A3 * @B3
DECLARE @A2 numeric(20,15)
DECLARE @B2 numeric(20,15)
SET @A2 = 20.225
SET @B2 = 53.3875
SELECT @A2 * @B2
DECLARE @A4 float
DECLARE @B4 float
SET @A4 = 20.225
SET @B4 = 53.3875
SELECT @A4 * @B4
Что дает следующие результаты соответственно:
1079,762188
1079,762188
1079,7621875
+1079,762187500000000000000000000
1079,7621875
Правильный ответ: 1079.7621875.
Я не понимаю, почему, когда типы имеют одинаковую сигнатуру, они теряют точность. Кроме того, почему переход с 30,14 на 30,15 решает проблему точности? Кроме того, почему 20,15 имеет гораздо больше десятичных знаков, чем 30,15?
Я прочитал эту статью http://msdn.microsoft.com/en-us/library/ms190476(SQL.90).aspx и думаю, что все будет в порядке, потому что мои переменные имеют одинаковую точность.
Любая помощь будет высоко ценится!