2012-06-20 37 views
8

एक एसक्यूएल int के लिए जो एक फ्लोट में परिवर्तित किया जा रहा है, मैं फ़्लोटिंग पॉइंट नंबर की सटीकता कैसे निर्धारित करूं?एसक्यूएल सेट फ्लोटिंग पॉइंट परिशुद्धता

यह चयन मैं दो या 3 दशमलव स्थानों के लिए काटना चाहते हैं:

AVG(Cast(e.employee_level as Float))avg_level, 

धन्यवाद!

उत्तर

22

टीएसक्यूएल में, आप float, 24 या 53 के लिए दो अलग-अलग आकार निर्दिष्ट कर सकते हैं। यह क्रमशः 7 या 15 अंकों के लिए सटीक सेट करेगा।

तुम सब दशमलव स्थानों की एक निर्धारित संख्या को छोटा कर देते है क्या करना चाहते हैं, तो आप ROUND का उपयोग कर सकते हैं, तो अर्थात्:

ROUND(AVG(CAST(e.employee_level as float)), 3) 
+2

ध्यान दें कि यदि आप 24 या 53 के अलावा किसी अन्य के लिए फ्लोट (एन) का उपयोग करते हैं, तो यह 24 या 53 तक हो जाता है – Bort

1

एक सामान्य नियम के रूप में, आप के बाद अंकों की संख्या निर्दिष्ट नहीं कर सकते एक फ्लोटिंग-पॉइंट नंबर के लिए दशमलव बिंदु। फ़्लोटिंग पॉइंट डेटा प्रकार किसी भी दिए गए मान के निकटतम फ़्लोटिंग-पॉइंट सन्निकटन को स्टोर करते हैं। निकटतम फ़्लोटिंग-पॉइंट सन्निकटन में आपके इच्छित अंकों की संख्या होने की संभावना नहीं है। यद्यपि आप तीसरे के बाद प्रत्येक अंक को दबाने में सक्षम हो सकते हैं, यह केवल मूल्य की उपस्थिति को बदल देगा, न कि मूल्य स्वयं।

इंटीग्रर्स एक अलग कहानी है। एक पूर्णांक - एक फ़्लोटिंग-पॉइंट डेटा प्रकार में संग्रहीत, परिवर्तित, या कास्ट - बिल्कुल एक बड़ी श्रृंखला में संग्रहीत किया जाएगा। फ़्लोटिंग-पॉइंट डेटा प्रकारों को पूर्णांक के लिए किसी भी fractional इकाइयों को स्टोर करने की आवश्यकता नहीं है।

मैं, सुझाव देंगे कि हालांकि आप के लिए सबसे अच्छा अभ्यास अगर आप आंशिक इकाइयों की जरूरत नहीं है फ्लोटिंग प्वाइंट को

  • से बचने के कास्टिंग पूर्णांकों के लिए है, या
  • डाली पूर्णांकों दशमलव में या संख्यात्मक करने के लिए यदि आप को fractional इकाइयों की आवश्यकता है, या
  • पूरी तरह से एप्लिकेशन कोड में प्रदर्शन समस्याओं को संभाल लें।