Ho riscontrato un problema con la precisione di SQL Server.Sql Server Precision Crazyness
ho le seguenti domande:
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
che produce i seguenti risultati: rispettivamente
1079,762188
1079,762188
1079,7621875
1079,762187500000000000000000000
1079.7621875
La risposta corretta è: 1079.7621875.
Non capisco perché, quando i tipi hanno la stessa firma stanno perdendo precisione. Inoltre, perché passare da 30,14 a 30,15 risolve il problema di precisione? Inoltre, perché 20,15 hanno così tanti decimali in più rispetto a 30,15?
Ho letto questo articolo http://msdn.microsoft.com/en-us/library/ms190476(SQL.90).aspx e penso che dovrei andare bene perché le mie variabili hanno la stessa precisione.
Qualsiasi aiuto sarebbe molto apprezzato!
Donnie, capisco che in (30,15) il risultato è 61 e viene ridotto a 38. Tuttavia basato sulla formula che ho visto sembra che la mia scala dovrebbe essere -2 o qualcosa del genere. Qual è la formula per determinare qual è la scala? – zgirod