क्या अंतर है numeric, floatऔर decimalडेटाटाइप्स और जो जो स्थितियों में इस्तेमाल किया जाना चाहिए?
किसी भी प्रकार के वित्तीय लेनदेन के लिए (जैसे वेतन क्षेत्र के लिए), कौन सा पसंद किया जाता है और क्यों?
क्या अंतर है numeric, floatऔर decimalडेटाटाइप्स और जो जो स्थितियों में इस्तेमाल किया जाना चाहिए?
किसी भी प्रकार के वित्तीय लेनदेन के लिए (जैसे वेतन क्षेत्र के लिए), कौन सा पसंद किया जाता है और क्यों?
जवाबों:
का उपयोग नाव या वास्तविक डेटा प्रकार केवल तभी द्वारा प्रदान की परिशुद्धता दशमलव (38 अंक तक) के लिए अपर्याप्त है
अनुमानित संख्यात्मक डेटा प्रकार कई संख्याओं के लिए निर्दिष्ट सटीक मानों को संग्रहीत नहीं करते हैं ; वे मूल्य का एक अत्यंत निकट सन्निकटन संग्रहीत करते हैं । ( Technet )
विशेष रूप से = और <> ऑपरेटरों ( तकनीक ) में, जहां और कहीं भी खोज की स्थिति में फ्लोट या वास्तविक कॉलम का उपयोग करने से बचें।
इसलिए आम तौर पर क्योंकि दशमलव द्वारा प्रदान की गई परिशुद्धता [10E38 ~ 38 अंक] है यदि आपका नंबर इसमें फिट हो सकता है, और फ्लोट का छोटा भंडारण स्थान (और शायद गति) महत्वपूर्ण नहीं है और असामान्य व्यवहार और अनुमानित संख्यात्मक प्रकारों से संबंधित नहीं है स्वीकार्य है, आम तौर पर दशमलव का उपयोग करें ।
अधिक उपयोगी जानकारी

मुख्य स्रोत : MCTS स्व-संचालित प्रशिक्षण किट (परीक्षा 70-433): Microsoft® SQL Server® 2008 डेटाबेस विकास - अध्याय 3 - तालिकाएँ, डेटा प्रकार, और घोषणात्मक डेटा अखंडता पाठ 1 - डेटा प्रकार (दिशानिर्देश) चुनना - पृष्ठ 93
use the float or real data types only if the precision provided by decimal is insufficient- मुझे लगा कि असली LESS सही है तो दशमलव, तो कैसे वास्तविक का उपयोग करने के लिए लिखने अगर दशमलव अपर्याप्त है?
decimalबस ठीक हो जाएगा। यह 20 की सटीकता है। यदि आपको 1e20 और 1e-20 के बीच मानों को संग्रहीत करने की आवश्यकता है, तो , decimal ऐसा नहीं कर सकते । यह शुद्धता का 40 अंक है। आप कभी भी 1e20 और 1e-20 को एक ही decimalफ़ील्ड में संग्रहीत नहीं कर सकते हैं । इसके बजाय, आप उपयोग कर सकते हैं float, जो आंतरिक रूप से आधार के लॉग के रूप में सब कुछ संग्रहीत करता है। यह एक क्षेत्र में परिशुद्धता की एक पूरी श्रृंखला को खामी के साथ अनुमति देता है कि केवल पहले ~ 8 अंक सटीक होंगे।
float..." - किसने कहा? वह बोली है या आपकी राय?
MSDN से दिशानिर्देश: दशमलव, फ्लोट और वास्तविक डेटा का उपयोग करना
संख्यात्मक और दशमलव डेटा प्रकारों की डिफ़ॉल्ट अधिकतम परिशुद्धता 38 है। लेनदेन-एसक्यूएल में, संख्यात्मक कार्यात्मक रूप से दशमलव डेटा प्रकार के बराबर है। दशमलव डेटा प्रकार का उपयोग दशमलव के साथ संख्याओं को संग्रहीत करने के लिए करें जब डेटा मान बिल्कुल निर्दिष्ट किए जाने चाहिए।
फ्लोट और रियल का व्यवहार अनुमानित संख्यात्मक डेटा प्रकारों पर IEEE 754 विनिर्देशन का अनुसरण करता है। फ्लोट और वास्तविक डेटा प्रकारों की अनुमानित प्रकृति के कारण, सटीक संख्यात्मक व्यवहार की आवश्यकता होने पर इन डेटा प्रकारों का उपयोग न करें, जैसे कि वित्तीय अनुप्रयोगों में, राउंडिंग से जुड़े कार्यों में, या समानता जांच में। इसके बजाय, पूर्णांक, दशमलव, धन या छोटे डेटा प्रकारों का उपयोग करें। विशेष रूप से = और <> ऑपरेटरों में, जहां और कहीं भी खोज स्थितियों में फ्लोट या वास्तविक कॉलम का उपयोग करने से बचें। फ्लोट और वास्तविक कॉलम को> या <तुलनाओं तक सीमित करना सबसे अच्छा है।
Scaleस्तंभ में दशमलव की (निश्चित) संख्या निर्दिष्ट है ।
numericक्योंकि यह आपके द्वारा पूछे जाने से अधिक सटीकता के साथ कभी भी स्टोर नहीं करेगा: देखें stackoverflow.com/a/759606/626804
पूर्ण उत्तर नहीं, बल्कि एक उपयोगी लिंक:
"मैं अक्सर दशमलव मानों के खिलाफ गणना करता हूं। कुछ मामलों में, किसी भी गणना से पहले ASAP को फ्लोट करने के लिए दशमलव मूल्यों की कास्टिंग, किसी भी गणना की उपज देती है।"
decimalऔर floatकर रहे हैं अलग । दशमलव सटीक या पैमाने को बढ़ाकर जितना संभव हो उतना कम प्रवाह के खिलाफ संरक्षित करता है। हालाँकि, एक बार जब आप दशमलव में महत्वपूर्ण अंकों की सीमा से टकरा जाते हैं, तो अंडरफ्लो शांत हो जाता है (और सटीक खो जाता है)। फ्लोट में पैमाने की व्यापक रेंज संभव है, और यह पैमाने की सीमाएं हैं जो वास्तव में अंडरफ्लो का कारण हैं। इस प्रकार, फ्लोट में बेहतर पैमाने हो सकते हैं। बहरहाल, यह अभी भी एक अक्षम प्रकार है।
दशमलव और न्यूमेरिक समान कार्यात्मक हैं लेकिन अभी भी डेटा प्रकार की पूर्ववर्तीता है , जो कुछ मामलों में महत्वपूर्ण हो सकती है।
SELECT SQL_VARIANT_PROPERTY(CAST(1 AS NUMERIC) + CAST(1 AS DECIMAL),'basetype')
परिणामी डेटा प्रकार संख्यात्मक है क्योंकि यह डेटा प्रकार की पूर्वता लेता है ।
पूर्वगामी द्वारा डेटा प्रकारों की व्यापक सूची:
दशमलव में एक निश्चित परिशुद्धता होती है जबकि फ्लोट में परिवर्तनशील परिशुद्धता होती है।
EDIT (संपूर्ण प्रश्न पढ़ने में विफल): फ्लोट (53) (उर्फ वास्तविक) SQL सर्वर में एक डबल-परिशुद्धता (32-बिट) फ़्लोटिंग पॉइंट संख्या है। रेगुलर फ्लोट एक एकल-सटीक फ्लोटिंग पॉइंट नंबर है। डबल बहुत सारी गणनाओं के लिए सटीक और सरलता का एक अच्छा संयोजन है। आप दशमलव के साथ एक बहुत ही उच्च परिशुद्धता संख्या बना सकते हैं - 136-बिट तक - लेकिन आपको यह भी ध्यान रखना होगा कि आप अपनी सटीकता और पैमाने को सही ढंग से परिभाषित करते हैं ताकि इसमें आपके सभी मध्यवर्ती गणनाओं को आवश्यक अंकों की संख्या तक शामिल किया जा सके।
फ्लोट लगभग-संख्या डेटा प्रकार है, जिसका अर्थ है कि डेटा प्रकार श्रेणी में सभी मान बिल्कुल नहीं दिखाए जा सकते हैं।
दशमलव / संख्यात्मक फिक्स्ड-प्रिसिजन डेटा प्रकार है, जिसका अर्थ है कि डेटा टाइप रेंज के सभी मूल्यों को सटीक और पैमाने के साथ सटीक रूप से दर्शाया जा सकता है। आप पैसे की बचत के लिए दशमलव का उपयोग कर सकते हैं।
दशमलव या न्यूमेरिक से फ्लोट में परिवर्तित होने से परिशुद्धता का कुछ नुकसान हो सकता है। दशमलव या न्यूमेरिक डेटा प्रकारों के लिए, SQL सर्वर सटीक और स्केल के प्रत्येक विशिष्ट संयोजन को एक अलग डेटा प्रकार मानता है। DECIMAL (2,2) और DECIMAL (2,4) विभिन्न डेटा प्रकार हैं। इसका मतलब है कि 11.22 और 11.2222 अलग-अलग प्रकार के हैं, हालांकि यह फ्लोट के लिए मामला नहीं है। FLOAT (6) के लिए 11.22 और 11.2222 समान डेटा प्रकार हैं।
आप पैसे बचाने के लिए मनी डेटा प्रकार का भी उपयोग कर सकते हैं । यह पैसों के लिए 4 अंकों की शुद्धता के साथ मूल डेटा प्रकार है। ज्यादातर विशेषज्ञ पैसे बचाने के लिए इस डेटा प्रकार को पसंद करते हैं।
क्या यह अंतर्निहित की जरूरत है?
यह इस तथ्य से उत्पन्न होता है कि, अंततः, कंप्यूटर द्विआधारी प्रारूप में आंतरिक रूप से प्रतिनिधित्व करते हैं। वह, अपरिहार्य रूप से, राउंडिंग त्रुटियों की ओर जाता है।
इस पर विचार करो:
0.1 (decimal, or "base 10") = .00011001100110011... (binary, or "base 2")
उपरोक्त दीर्घवृत्त [...] का अर्थ है 'अनंत'। यदि आप इसे ध्यान से देखें, तो एक अनंत दोहराव वाला पैटर्न है (= '0011')
तो, कुछ बिंदु पर कंप्यूटर को उस मूल्य को गोल करना पड़ता है। यह उन संचय त्रुटियों की ओर जाता है जो संख्याओं के बार-बार उपयोग से प्राप्त होते हैं जो कि अनावश्यक रूप से संग्रहीत होते हैं।
यह कहें कि आप वित्तीय राशियों को संग्रहीत करना चाहते हैं (जो संख्याएँ हैं जिनका एक भिन्न भाग हो सकता है)। सबसे पहले, आप स्पष्ट रूप से पूर्णांक का उपयोग नहीं कर सकते हैं (पूर्णांक एक अंश नहीं है)। विशुद्ध गणितीय दृष्टिकोण से, प्राकृतिक प्रवृत्ति का उपयोग करना होगा float। लेकिन, एक कंप्यूटर में, फ़्लोट्स में एक संख्या का एक हिस्सा होता है जो दशमलव बिंदु के बाद स्थित होता है - "मंटिसा" - सीमित। यह गोलाई त्रुटियों की ओर जाता है।
इसे दूर करने के लिए, कंप्यूटर विशिष्ट डेटाटिप्स प्रदान करते हैं जो दशमलव संख्या के लिए कंप्यूटर में द्विआधारी गोलाई त्रुटि को सीमित करते हैं। ये डेटा प्रकार हैं जिनका उपयोग वित्तीय राशियों का प्रतिनिधित्व करने के लिए किया जाना चाहिए। ये डेटा प्रकार आमतौर पर के नाम से जाते हैं Decimal। उदाहरण के लिए, C # में ऐसा ही है। या, DECIMALअधिकांश डेटाबेस में।
हालाँकि इस सवाल में पैसा डेटा प्रकार शामिल नहीं था लेकिन इस गणना में आने वाले कुछ लोगों को वित्तीय गणना के लिए पैसे डेटा प्रकार का उपयोग करने के लिए लुभाया जा सकता है।
पैसा डेटा प्रकार से सावधान रहें, यह सीमित परिशुद्धता का है।
इस Stackoverflow सवाल के जवाब में इसके बारे में बहुत अच्छी जानकारी है:
क्या आपको SQL Server में पैसा या DECIMAL (x, y) डेटाटाइप चुनना चाहिए?