Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server:Десетичната точност/мащаб дава странни резултати

документация е малко непълен по отношение на магията на стойността 6 и кога да приложите max функция, но ето таблица с моите констатации, базирана на тази документация.

Както се казва, формулите за деление са:

И както вие сами подчертавате, тогава имаме бележката под линия:

И така, ето какво създадох в моята електронна таблица:

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

И така, използвам pr и sr за указване на точността и мащаба на резултата. prInit и srInit формулите са точно форумите от документацията. Както виждаме, във всичките 3 случая точността на резултата е много по-голяма от 38 и така се прилага бележката под линия. prOver е просто max(0,prInit - 38) - с колко трябва да коригираме точността, ако се прилага бележката под линия. prAdjusted е просто prInit - prOver . Можем да видим и в трите случая, че крайната точност на резултата е 38 .

Ако приложа същото коефициент на корекция към скалите, тогава бих получил резултати от 0 , 10 и 9 . Но можем да видим, че вашият резултат за (38,16) case има скала 6 . Така че вярвам, че това е мястото, където max(6,... част от документацията действително се прилага. И така, последната ми формула за srAdjusted е max(6,srInit-prOver) и сега моят окончателен Adjusted изглежда, че стойностите съответстват на вашите резултати.

И, разбира се, ако се консултираме с документацията за decimal , можем да видим, че по подразбиране прецизност и мащаб, ако не ги посочите, са (18,0) , така че ето реда за случаите, когато не сте посочили точност и мащаб:

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. Как да отстраните грешки в SQL Server T-SQL във Visual Studio 2012

  2. Получаване на върната стойност от съхранената процедура в C#

  3. SQL съединяване срещу периоди от време?

  4. SQL Server - Как да дам достъп за четене до ВСИЧКИ бази данни за влизане?

  5. Изчисляване на стойност с помощта на предишна стойност на ред в T-SQL