Tengo un problema con la precisión del servidor sql.Sql Server Precision Crazyness
tengo las siguientes consultas:
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
que da los siguientes resultados: respectivamente
1079.762188
1079.762188
1079.7621875
1,079.762187500000000000000000000
1079.7621875
La respuesta correcta es: 1079.7621875.
No entiendo por qué, cuando los tipos tienen la misma firma, están perdiendo precisión. Además, ¿por qué pasar de 30,14 a 30,15 soluciona el problema de precisión? Además, ¿por qué 20,15 tiene tantos decimales más que 30,15?
He leído este artículo http://msdn.microsoft.com/en-us/library/ms190476(SQL.90).aspx y creo que debería estar bien porque mis variables tienen la misma precisión.
¡Cualquier ayuda sería muy apreciada!
Donnie, entiendo que en el (30,15) el resultado es 61 y se reduce a 38. Sin embargo basado en la fórmula que vi, parece que mi escala debería ser -2 o algo así. ¿Cuál es la fórmula para determinar qué es la escala? – zgirod