जिस तरह फ्लोट प्रकार का जोड़ गलत है, उसी तरह दशमलव प्रकारों का गुणन गलत हो सकता है (या अशुद्धि का कारण बन सकता है) यदि आप सटीकता से अधिक हैं। देखें डेटा प्रकार रूपांतरण और दशमलव और संख्यात्मक ।
चूंकि आपने NUMERIC(24,8)
. को गुणा किया है और NUMERIC(24,8)
, और SQL सर्वर केवल सामग्री के प्रकार की जाँच करेगा, यह संभवतः संभावित 16 गैर-दशमलव अंकों (24 - 8) को सहेजने का प्रयास करेगा जब यह सटीकता के सभी 48 अंकों को नहीं सहेज सकता (अधिकतम 38 है)। उनमें से दो को मिलाएं, आपको 32 गैर-दशमलव अंक मिलते हैं, जो आपको केवल 6 दशमलव अंक (38 - 32) के साथ छोड़ देता है।
इस प्रकार मूल क्वेरी
SELECT A, B, C, A + B * C
FROM ( SELECT CAST(0.12345678 AS NUMERIC(24,8)) AS A,
CAST(0 AS NUMERIC(24,8)) AS B,
CAST(500 AS NUMERIC(24,8)) AS C ) T
कम कर देता है
SELECT A, B, C, A + D
FROM ( SELECT CAST(0.12345678 AS NUMERIC(24,8)) AS A,
CAST(0 AS NUMERIC(24,8)) AS B,
CAST(500 AS NUMERIC(24,8)) AS C,
CAST(0 AS NUMERIC(38,6)) AS D ) T
फिर से, NUMERIC(24,8)
. के बीच और NUMERIC(38,6)
, SQL सर्वर गैर-दशमलवों के संभावित 32 अंकों को सहेजने का प्रयास करेगा, इसलिए A + D
कम कर देता है
SELECT CAST(0.12345678 AS NUMERIC(38,6))
जो आपको 0.123457
. देता है गोल करने के बाद।