Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server:Dokładność dziesiętna/skala dają dziwne wyniki

dokumentacja jest trochę niekompletna co do magii wartości 6 i kiedy zastosować max funkcji, ale oto tabela moich ustaleń, oparta na tej dokumentacji.

Jak mówi, wzory na dzielenie to:

I, jak sam podkreślasz, mamy przypis:

Oto, co stworzyłem w moim arkuszu kalkulacyjnym:

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

Więc używam pr i sr aby wskazać precyzję i skalę wyniku. prInit i srInit formuły to dokładnie fora z dokumentacji. Jak widać, we wszystkich 3 przypadkach dokładność wyniku jest znacznie większa niż 38 dlatego obowiązuje przypis. prOver to tylko max(0,prInit - 38) - o ile musimy dostosować precyzję, o ile ma zastosowanie przypis. prDostosowany to tylko prInit - prOver . Widzimy we wszystkich trzech przypadkach, że ostateczna precyzja wyniku wynosi 38 .

Jeśli zastosuję to samo współczynnik dopasowania do skali to otrzymałbym wyniki 0 , 10 i 9 . Ale widzimy, że Twój wynik dla (38,16) sprawa ma skalę 6 . Uważam więc, że właśnie tam max(6,... część dokumentacji faktycznie ma zastosowanie. Więc moja ostateczna formuła dla srAdjusted to max(6,srInit-prOver) a teraz mój ostateczny dostosowany wartości wydają się pasować do wyników.

I oczywiście, jeśli zapoznamy się z dokumentacją decimal , widzimy, że domyślny precyzja i skala, jeśli ich nie określisz, to (18,0) , więc oto wiersz, w którym nie określono precyzji i skali:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Usługa Windows czy zadanie SQL?

  2. Pytania dotyczące wydajności dotyczące zależności pamięci podręcznej SQL

  3. Obejście problemu zdalnego wywoływania funkcji z wartościami przechowywanymi w tabeli w SQL Server ma jeszcze więcej problemów

  4. Automatyczne zwiększanie kolumny bez tożsamości w sql-server

  5. Jak wygenerować zakres dat w SQL Server