प्रतिशत मान रखने के लिए उपयुक्त डेटाटाइप?


जवाबों:


132

आपके प्रतिशत पर दो दशमलव स्थानों को मानते हुए, आपके द्वारा उपयोग किया जाने वाला डेटा प्रकार इस बात पर निर्भर करता है कि आप अपने प्रतिशत को कैसे संग्रहीत करते हैं। यदि आप उनके आंशिक समतुल्य को स्टोर करने जा रहे हैं (जैसे 100.00% 1.0000 के रूप में संग्रहीत), तो मैं decimal(5,4)डेटा को एक CHECKबाधा के साथ डेटा प्रकार में संग्रहीत करूँगा जो यह सुनिश्चित करता है कि मान कभी भी 1.0000 से अधिक न हों (यह मानते हुए कि कैप है) और कभी भी नीचे नहीं जाएं। (यह मानते हुए कि मंजिल है)। यदि आप उनके अंकित मूल्य को स्टोर करने जा रहे हैं (जैसे 100.00% को 100.00 के रूप में संग्रहीत किया जाता है), तो आपको decimal(5,2)एक उपयुक्त CHECKबाधा के साथ उपयोग करना चाहिए । एक अच्छा कॉलम नाम के साथ संयुक्त, यह अन्य डेवलपर्स को स्पष्ट करता है कि डेटा क्या है और डेटा को कॉलम में कैसे संग्रहीत किया जाता है।


12
ऐसा नहीं होना चाहिए decimal(5,2)जहाँ 2 दशमलव विभाजक के बाद अंकों की संख्या को दर्शाता है?
बोरिस ने

2
@ बोरिसकैलेंस - विश्वास नहीं कर सकता कि मैं इन सभी वर्षों में चूक गया। हां, यह एक टाइपो है। decimal(5,2)वह है जो एक चेक बाधा के साथ पकड़ा जाना चाहिए।
थॉमस

4
मुझे लगता है कि यह मूल रूप से था decimal(5,4)और decimal(5,2)उपरोक्त टिप्पणी के बाद बदल दिया गया था ... मुझे लगता decimal(5,4)है कि बेहतर परिभाषा होगी - यानी आप 0 से 1 को 2 दशमलव स्थानों के साथ संग्रहीत करना चाहते हैं, न कि 0 से 100 तक। कारण यह है कि प्रतिशत का बाहर होना 100; इसलिए 100% 100/100 है जो 1. है। इस तरह से करने से अधिकांश मामलों (जैसे 100% * 100% = 100%, नहीं 10000%; 1 * 1 = 1) के लिए अधिक समझ में आता है ।
जॉनब्लेवन

4
@ जॉनलोवेन - यह इस बात पर खर्च करता है कि उन्हें कैसे संग्रहीत किया जा रहा है। यदि मान प्रदर्शित किए जा रहे हैं (उदाहरण के लिए 100.00) तो आपको जरूरत है decimal(5,2)। यदि मानों को अंशों (जैसे 1.0000) के रूप में संग्रहीत किया जा रहा है , तो आपको आवश्यकता है decimal(5,4)। पोस्ट को अपडेट करेंगे।
थॉमस

क्या कोई समझा सकता है कि आपको 4 दशमलव स्थानों की आवश्यकता क्यों है? आप 2 का उपयोग नहीं कर सकते? जैसे .91 === 91% या 1.00 === 100%। अब मैं इसे लागू कर रहा हूं और 4 स्थानों पर लाभ प्राप्त कर रहा हूं। Pct दशमलव (10, 2) CHECK (Pct> = 01 और Pct <= 1) जैसा कुछ। अग्रिम में धन्यवाद।
एमएच

31
  • एक के रूप में पकड़ो decimal
  • यदि आप सीमा को सीमित करना चाहते हैं तो चेक की कमी जोड़ें (जैसे 0 से 100% के बीच, कुछ मामलों में 100% से आगे जाने के लिए वैध कारण हो सकते हैं या संभावित रूप से नकारात्मक भी हो सकते हैं)।
  • मान 1 को 100%, 0.5 को 50%, आदि के रूप में मानें। यह किसी भी गणित के संचालन को अपेक्षित रूप से कार्य करने की अनुमति देगा (अर्थात मान 100 के रूप में 100% का उपयोग करने का विरोध करता है)।
  • आवश्यकता के अनुसार सटीकता और पैमाने में संशोधन करें (ये कोष्ठक में दो मान हैं columnName decimal(precision, scale)। परिशुद्धता कहती है कि अंकों की कुल संख्या, जो संख्या में आयोजित की जा सकती है, पैमाने कहते हैं कि दशमलव स्थान के बाद उनमें से कितने हैं, इसलिए decimal(3,2)एक संख्या है जिसका प्रतिनिधित्व किया जा सकता है के रूप में #.##, decimal(5,3)हो सकता है ##.###
  • decimalऔर numericअनिवार्य रूप से एक ही बात कर रहे हैं। हालांकि decimal, एएनएसआई आज्ञाकारी है, इसलिए हमेशा इसका उपयोग करें जब तक कि अन्यथा नहीं बताया जाता है (जैसे आपकी कंपनी के कोडिंग मानकों द्वारा)।

उदाहरण परिदृश्य

  • आपके मामले के लिए (0.00% से 100.00%) आप चाहते हैं decimal(5,4)
  • सबसे सामान्य मामले के लिए (0% से 100%) आप चाहते हैं decimal(3,2)
  • उपरोक्त दोनों में, चेक की कमी समान होगी

उदाहरण:

if object_id('Demo') is null
create table Demo
    (
        Id bigint not null identity(1,1) constraint pk_Demo primary key
        , Name nvarchar(256) not null constraint uk_Demo unique 
        , SomePercentValue decimal(3,2) constraint chk_Demo_SomePercentValue check (SomePercentValue between 0 and 1)
        , SomePrecisionPercentValue decimal(5,2) constraint chk_Demo_SomePrecisionPercentValue check (SomePrecisionPercentValue between 0 and 1)
    )

आगे की पढाई:


4

मैं थॉमस से सहमत हूं और मैं कम से कम WPF अनुप्रयोगों के लिए DECIMAL (5,4) समाधान चुनूंगा।

MSDN न्यूमेरिक फॉर्मेट स्ट्रिंग के बारे में जानने के लिए एक नज़र डालें: http://msdn.microsoft.com/en-us/library/dwhawy9k#PFormatString

प्रतिशत ("P") प्रारूप एक संख्या को 100 से गुणा करता है और इसे एक स्ट्रिंग में परिवर्तित करता है जो प्रतिशत का प्रतिनिधित्व करता है।

तब आप अपने XAML कोड में इसका उपयोग कर सकेंगे:

DataFormatString="{}{0:P}"

2

यदि 2 दशमलव स्थान आपकी सटीकता का स्तर है, तो एक "स्मॉलिंट" इसे सबसे छोटे स्थान (2-बाइट्स) में संभाल लेगा। आप प्रतिशत को 100 से गुणा करते हैं।

संपादित करें: दशमलव प्रकार शायद एक बेहतर मेल है। फिर आपको मैन्युअल रूप से स्केल करने की आवश्यकता नहीं है। यह प्रति मूल्य 5 बाइट लेता है।


Microsoft ने इसके कई लिंक
तोड़

0

संख्यात्मक (n, n) का उपयोग करें जहां n में 1.00 से गोल करने के लिए पर्याप्त रिज़ॉल्यूशन है। उदाहरण के लिए:

declare @discount numeric(9,9)
    , @quantity int
select @discount = 0.999999999
    , @quantity = 10000

select convert(money, @discount * @quantity)

3
इस प्रश्न का तीन साल पहले से काफी उच्च श्रेणी में स्वीकृत उत्तर है। यदि आप उत्तर देने के लिए पुराने प्रश्नों की तलाश कर रहे हैं, तो कृपया यहाँ देखें: stackoverflow.com/unanswered
valverij
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.