2014-12-05 8 views
5

यह एक मूर्ख सवाल की तरह लगता है, लेकिन मैंने देखा है कि ई-कॉमर्स से संबंधित परियोजनाओं के लिए कई टेबल डिज़ाइनों में मैं लगभग हमेशा दशमलव (1 9, 4) मुद्रा के लिए उपयोग किया जाता हूं।दशमलव (1 9, 4) या दशमलव (1 9 .2) - मुझे किस का उपयोग करना चाहिए?

4 पैमाने पर क्यों? 2 क्यों नहीं?

शायद मुझे सड़क पर संभावित गणना समस्या याद आ रही है?

+0

जब आपके पास एक एमएस-एसक्यूएल डेटाबेस है तो आप डेटाटाइप पैसे का उपयोग कर सकते हैं। –

+0

@ जोचिमसॉयर - दशमलव दशमलव से अधिक सटीक है, और क्योंकि मुझे कई ई-कॉमर्स प्रकार उदाहरणों में दशमलव का उपयोग किया जाता है। – user1447679

+0

उच्च परिशुद्धता गोल करने वाली त्रुटियों को कम करने में मदद करता है - बस एक अनुमान – Dinesh

उत्तर

10

सबसे पहले - आपको अन्य उत्तरों से कुछ गलत सलाह मिल रही है। - सभी में 39

declare @op1 decimal(18,2) = 0.01 
     ,@op2 decimal(18,2) = 0.01; 

select result = @op1 * @op2; 

result 
---------.---------.---------.--------- 
0.0001 

(1 row(s) affected) 

नोट शीर्षक के नीचे अंडरस्कोर की संख्या: निम्नलिखित (64-बिट वास्तुकला पर 64-बिट ओएस) Obseve। (मैंने गिनती की सहायता के लिए प्रत्येक दसवीं अवधि को बदल दिया।) यह 38 अंकों (अधिकतम स्वीकार्य, और 64 बिट सीपीयू पर डिफ़ॉल्ट) के साथ सटीक रूप से पर्याप्त है और साथ ही प्रदर्शन पर दशमलव बिंदु भी है। हालांकि दोनों ऑपरेटरों को दशमलव (18,2) के रूप में घोषित किया गया था, और गणना की गई, दशमलव (38,4) डेटाैट टाइप में। (मैं 64 बिट मशीन पर SQL 2012 चला रहा हूं - कुछ विवरण मशीन आर्किटेक्चर और ओएस के आधार पर भिन्न हो सकते हैं।)

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

ऊपर दिए गए उदाहरण पर विचार करें। दो ऑपरेंड दोनों प्रकार दशमलव (18,2) हैं और 2 के पैमाने के साथ मान 1 के पूर्णांक के रूप में संग्रहीत किए जाते हैं। जब उत्पाद गुणा किया जाता है तब भी 1 होता है, लेकिन स्केल को स्केल जोड़कर मूल्यांकन किया जाता है पूर्णांक मान 1 और स्केल 4 का परिणाम बनाएं, जो कि 0.0001 का मान और दशमलव (18,4) है, जो मान 1 और स्केल 4 के साथ पूर्णांक के रूप में संग्रहीत है।

फिर से अंतिम पैराग्राफ पढ़ें।

कुल्ला और एक बार फिर दोहराएं।

अभ्यास में, 64 बिट मशीन और ओएस पर, यह वास्तव में संग्रहीत किया जाता है और टाइप * दशमलव (38,4) के रूप में आगे बढ़ता है क्योंकि गणना सीपीयू पर की जा रही है जहां अतिरिक्त बिट्स मुक्त हैं।

अपने प्रश्न पर लौटने के लिए - दुनिया की सभी प्रमुख मुद्राओं (जिन्हें मुझे पता है) केवल 2 दशमलव स्थानों की आवश्यकता है, लेकिन वहां कुछ मुट्ठी भर हैं जहां 4 आवश्यक हैं, और वित्तीय लेनदेन जैसे मुद्रा लेनदेन और बंधन हैं बिक्री जहां कानून द्वारा 4 दशमलव स्थान अनिवार्य हैं। पैसा डेटाटाइप माइक्रोसॉफ्ट ने अधिकतम पैमाने के लिए चुना है जो सामान्य पैमाने की आवश्यकता के बजाय आवश्यक हो सकता है। यह देखते हुए कि कितने लेनदेन और निगमों को वास्तव में 1 9 अंकों से अधिक सटीकता की आवश्यकता होती है, यह बेहद समझदार लगता है।

यदि आपके पास:

  1. ही प्रमुख मुद्राओं (जो वर्तमान समय में केवल बड़े पैमाने पर 2 अंक की आवश्यकता होती है) से निपटने का एक उच्च उम्मीद; और
  2. लेनदेन से निपटने का कोई उम्मीद है कि कानून द्वारा अनिवार्य कर रहे हैं पैमाने

तो की 4 अंक आप पैमाने 2 (जैसे दशमलव के साथ प्रकार दशमलव उपयोग करने के लिए सुरक्षित होता है की आवश्यकता होती है (19,2) या दशमलव (18,2) या दशमलव (38,2)) पैसे के बजाय। यह आपके कुछ रूपांतरणों को कम करेगा और, उपरोक्त धारणाओं को देखते हुए, कोई कीमत नहीं है। एक सामान्य मामला जहां इन मान्यताओं मिले हैं, जीएल या सुब्लेगर एकाउंटिंग सिस्टम में लेनदेन को ट्रैक करने वाले लेनदेन में है। हालांकि, स्टॉक- या बॉन्ड-ट्रेडिंग सिस्टम इन धारणाओं को पूरा नहीं करेगा क्योंकि उन मामलों में कानून द्वारा 4 अंकों के पैमाने को अनिवार्य किया जाता है।

दो मामलों भेद करने के लिए एक तरीका है कि लेन-देन सेंट या percents है, जो केवल बड़े पैमाने पर 2 अंक, या बेसिस पॉइंट्स जो बड़े पैमाने पर 4 अंक की आवश्यकता होती है में की आवश्यकता होती है में रिपोर्ट कर रहे हैं है।

यदि आप अनिश्चित हैं कि आपके प्रोग्रामिंग परिस्थिति पर कौन सा मामला लागू होता है, तो अपने आवेदन के लिए कानूनी और GAAP आवश्यकताओं के अनुसार अपने नियंत्रक या वित्त निदेशक से परामर्श लें। (एस) वह आपको निश्चित सलाह दे पाएगा।

+2

अविश्वसनीय विस्तार और अच्छी तरह से सोचा। धन्यवाद पीटर। – user1447679

0

एसक्यूएल में 1 9 पूर्णांक की मात्रा है, 4 दशमलव की मात्रा है।

यदि आपके पास केवल 2 दशमलव हैं और आप कुछ गणनाओं का परिणाम शायद स्टोर कर सकते हैं, जिसके परिणामस्वरूप 2 से अधिक दशमलव होते हैं, तो उन अतिरिक्त दशमलवों को स्टोर करने के लिए "कोई रास्ता नहीं" होता है।

कुछ मुद्राएं 2 से अधिक दशमलव के साथ संचालित होती हैं।

डेटा प्रकार दशमलव का उपयोग करें, पैसे नहीं।

+1

1 9 कुलांक की कुल राशि नहीं है? और 4 के दाईं ओर उपयोग के लिए, उस कुल संख्या से 4 निकाला जाता है। ? – user1447679

+1

हां, 1 9 पूर्णांक की मात्रा है (दशमलव शामिल है)। तो दशमलव (10,3) अधिकतम 99 99 999.9 99 [1234567.123] –

+0

हो सकता है क्या आप 2 के बजाय स्केल पर 4 का उपयोग करने की आवश्यकता के उदाहरण के बारे में सोच सकते हैं? चलिए एक टेबल के लिए कहते हैं जो मासिक सदस्यता कीमतों को संग्रहीत कर रहा है। एक उदाहरण परिदृश्य, संभावित गणना, या कुछ कारणों के लिए खोज रहे हैं कि 4 पैमाने पर सड़क के नीचे सहायक होगा। – user1447679

0

दशमलव का उपयोग करते समय यह आपके ऊपर निर्भर करता है कि आप अपनी व्यावसायिक आवश्यकताओं के अनुसार कैसे उपयोग करना चाहते हैं।

लेकिन जब आप डिफ़ॉल्ट रूप से एसक्यूएल में मनी डेटा प्रकार का उपयोग करेंगे तो यह 4 दशमलव स्थानों के साथ स्टोर करता है।

2

गैस की कीमतों जैसी चीजें अतिरिक्त "पैमाने" स्थितियों का उपयोग करेंगी। आपने प्रति गैलन $ 1.959 पर गैस देखी है, है ना?

संबंधित मुद्दे