Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL Server:Desimal Precision/Scale menghasilkan hasil yang aneh

dokumentasi sedikit tidak lengkap untuk keajaiban nilai 6 dan kapan harus menerapkan max fungsi, tapi inilah tabel temuan saya, berdasarkan dokumentasi itu.

Seperti yang dikatakan, rumus pembagian adalah:

Dan, seperti yang Anda soroti sendiri, kami kemudian memiliki catatan kaki:

Jadi, inilah yang saya hasilkan di spreadsheet saya:

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

Jadi, saya menggunakan pr dan sr untuk menunjukkan presisi dan skala hasil. prInit dan srInit formula persis forumlas dari dokumentasi. Seperti yang kita lihat, dalam semua 3 kasus, presisi hasil jauh lebih besar dari 38 dan catatan kaki berlaku. prOver hanya max(0,prInit - 38) - seberapa banyak kita harus menyesuaikan presisi jika catatan kaki berlaku. prAdjusted hanya prInit - prOver . Kita dapat melihat dalam ketiga kasus bahwa presisi akhir dari hasilnya adalah 38 .

Jika saya menerapkan sama faktor penyesuaian ke timbangan maka saya akan mendapatkan hasil 0 , 10 dan 9 . Tetapi kami dapat melihat bahwa hasil Anda untuk (38,16) case memiliki skala 6 . Jadi saya percaya bahwa di situlah max(6,... bagian dari dokumentasi benar-benar berlaku. Jadi rumus terakhir saya untuk srAdjusted adalah max(6,srInit-prOver) dan sekarang Adjusted terakhir saya nilai tampaknya cocok dengan hasil Anda.

Dan, tentu saja, jika kita membaca dokumentasi untuk decimal , kita dapat melihat bahwa default presisi dan skala, jika Anda tidak menentukannya, adalah (18,0) , jadi inilah baris saat Anda tidak menentukan presisi dan skala:

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. Penyedia bernama penyedia pipa kesalahan 40 tidak dapat membuka koneksi ke SQL Server kesalahan 2

  2. mengonversi stempel waktu Epoch ke server sql (format yang dapat dibaca manusia)

  3. SQL Server 2008 - JIKA TIDAK ADA INSERT ELSE UPDATE

  4. Bantuan sintaks Sql Server 2008 sp_executesql - Saya pikir kutipan saya tidak benar

  5. EXEC untuk MENGGUNAKAN Basis Data