Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

फ्लोट असंगतता का औसत

यह बहुत समान है:SELECT SUM(...) is non-deterministic when adding the column-values of datatype float

समस्या यह है कि गलत डेटाटाइप (FLOAT/REAL .) के साथ ) फ्लोटिंग पॉइंट मामलों पर अंकगणितीय संचालन का क्रम। कनेक्ट से डेमो:

DECLARE @fl FLOAT = 100000000000000000000
DECLARE @i SMALLINT = 0
WHILE (@i < 100)
BEGIN
    SET @fl = @fl + CONVERT(float, 5000)
    SET @i = @i + 1
END
SET @fl = @fl - 100000000000000000000
SELECT CONVERT(NVARCHAR(40), @fl, 2)
-- 0.000000000000000e+000


DECLARE @fl FLOAT = 0
DECLARE @i SMALLINT = 0
WHILE (@i < 100)
BEGIN
    SET @fl = @fl + CONVERT(float, 5000)
    SET @i = @i + 1
END
SET @fl = @fl + 100000000000000000000
SET @fl = @fl - 100000000000000000000
SELECT @fl
-- 507904

LiveDemo

संभावित समाधान:

  • CAST सटीक डेटाटाइप जैसे DECIMAL/NUMERIC . के सभी तर्क
  • तालिका बदलें और FLOAT बदलें करने के लिए DECIMAL
  • आप क्वेरी ऑप्टिमाइज़र को उसी क्रम से योग की गणना करने के लिए बाध्य करने का प्रयास कर सकते हैं।
<ब्लॉकक्वॉट>

अच्छी खबर यह है कि जब आपके आवेदन के लिए एक स्थिर क्वेरी परिणाम मायने रखता है, तो आप OPTION (MAXDOP 1) के साथ समांतरता को रोककर आदेश को समान होने के लिए बाध्य कर सकते हैं। ।

ऐसा लगता है कि प्रारंभिक लिंक मर चुका है। वेबसंग्रह




  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 सर्वर में लोअरकेस को अपरकेस में कैसे बदलें - UPPER ()

  2. SQL सर्वर में इतिहास तालिका में ऐतिहासिक रिकॉर्ड कैसे संग्रहीत करें

  3. सी # नेट कोड से एक एसक्यूएल संग्रहीत प्रक्रिया में एक शून्य चर कैसे पास करें?

  4. SQL सर्वर रिपोर्टिंग सेवा रिपोर्ट में वैकल्पिक पंक्ति रंग जोड़ें

  5. SQL सर्वर त्रुटि 109:INSERT कथन में VALUES खंड में निर्दिष्ट मानों की तुलना में अधिक स्तंभ हैं