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

SQL Server:Decimalpræcision/Skala giver mærkelige resultater

dokumentationen er lidt ufuldstændig med hensyn til magien ved værdien 6 og hvornår skal max anvendes funktion, men her er en tabel over mine resultater, baseret på den dokumentation.

Som der står, er formlerne for division:

Og som du selv fremhæver, har vi så fodnoten:

Så her er, hvad jeg producerede i mit regneark:

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

Så jeg bruger pr og sr for at angive nøjagtigheden og skalaen af ​​resultatet. prInit og srInit formler er præcis forumlaerne fra dokumentationen. Som vi kan se, er nøjagtigheden af ​​resultatet i alle 3 tilfælde langt større end 38 og så er fodnoten gældende. prOver er kun max(0,prInit - 38) - hvor meget vi skal justere præcisionen med, hvis fodnoten gælder. prAdjusted er bare prInit - prOver . Vi kan se i alle tre tilfælde, at den endelige præcision af resultatet er 38 .

Hvis jeg anvender det samme justeringsfaktor til skalaerne, så ville jeg opnå resultater på 0 , 10 og 9 . Men vi kan se, at dit resultat for (38,16) case har en skala på 6 . Så jeg tror, ​​at det er her max(6,...). del af dokumentationen faktisk gælder. Så min endelige formel for srAdjusted er max(6,srInit-prOver) og nu min sidste Justeret værdier ser ud til at matche dine resultater.

Og selvfølgelig, hvis vi konsulterer dokumentationen for decimal , kan vi se, at standard præcision og skala, hvis du ikke specificerer dem, er (18,0) , så her er rækken for, hvornår du ikke specificerede præcision og skala:

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



  1. hvordan gemmer man enum-værdi til DB med Hibernate?

  2. Oracle to_date funktion. Maske nødvendig

  3. Konverter nemt dine Microsoft Access-forespørgsler med dette nye værktøj!

  4. Sådan listes alle lagrede procedurer i MariaDB