Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server:Precisione decimale/Scala producono risultati strani

La documentazione è un po' incompleto per quanto riguarda la magia del valore 6 e quando applicare il max funzione, ma ecco una tabella dei miei risultati, basata su quella documentazione.

Come si dice, le formule per la divisione sono:

E, come lei stesso sottolinea, abbiamo poi la nota a piè di pagina:

Quindi, ecco cosa ho prodotto nel mio foglio di lavoro:

p1 s1 p2 s2 prInit srInit prOver prAdjusted srAdjusted
38 16 38 16 93     55     55     38         6
28 16 28 16 73     45     35     38         10
29 16 29 16 75     46     37     38         9

Quindi, sto usando pr e sr per indicare la precisione e la scala del risultato. Il prInit e srInit le formule sono esattamente le forumla della documentazione. Come possiamo vedere, in tutti e 3 i casi, la precisione del risultato è di gran lunga maggiore di 38 e quindi vale la nota a piè di pagina. prOver è solo max(0,prInit - 38) - di quanto dobbiamo regolare la precisione se si applica la nota a piè di pagina. prAdjusted è solo prInit - prOver . Possiamo vedere in tutti e tre i casi che la precisione finale del risultato è 38 .

Se applico lo uguale fattore di adeguamento alle scale quindi otterrei risultati di 0 , 10 e 9 . Ma possiamo vedere che il tuo risultato per il (38,16) il caso ha una scala di 6 . Quindi credo che sia qui che il max(6,... parte della documentazione si applica effettivamente. Quindi la mia formula finale per srAdjusted è max(6,srInit-prOver) e ora il mio Adjusted finale i valori sembrano corrispondere ai tuoi risultati.

E, naturalmente, se consultiamo la documentazione per decimal , possiamo vedere che il predefinito precisione e scala, se non le specifichi, sono (18,0) , quindi ecco la riga per quando non hai specificato precisione e scala:

p1 s1 p2 s2 prInit srInit prOver prAdjusted srAdjusted
18 0  18 0  37     19     0      37         19