2010-11-12 8 views
9

मैं एक दस्तावेज़ प्रबंधन प्रणाली दस्तावेजों से अधिक संस्करण हो सकता है जहां की है। प्रत्येक संस्करण सहेजा जाता है और उपयोगकर्ता संस्करण इतिहास देख सकते हैं।संस्करण संख्याओं तैरने लगते हैं, दशमलव या डबल

क्या मैं जानना चाहूंगा है: क्या डेटाप्रकार मैं संस्करण संख्याओं के लिए इस्तेमाल करना चाहिए? दशमलव, फ्लोट या डबल? मैं .NET और C# का उपयोग कर रहा हूं।

संस्करण संख्या 0.1 पर शुरू और प्रत्येक प्रकाशित प्रमुख संस्करण अगले पूर्ण संख्या में बढ़ा दिया जाएगा। यानी 0.42.0 आदि

जब एक संस्करण संख्या 0.9 और एक नाबालिग संस्करण जोड़ा जाता है मैं नंबर चाहते हैं 0.10 पर जाने के लिए हिट करने के लिए 1.0 और 1.3 चला जाता है को जाता है1.0, जब मैं इसमें जोड़ता हूं। यह सबसे बड़ा मुद्दा है।

कोई सुझाव की सराहना की कर रहे हैं।

धन्यवाद।

उत्तर

17

System.Version

यह पहले से ही अलग-अलग हिस्सों संग्रहीत करता है, एक तार (संशोधन के रूप में यह पेश के साथ सौदों और निर्माण घटक हैं के लिए भी तर्क केवल प्रदर्शन में प्रयोग किया जाता है यदि वे शून्य नहीं हैं, इसलिए आपके मामले में उनकी अपरिहार्यता कोई फर्क नहीं पड़ता) और (सबसे अच्छा) पहले से ही अन्य .NET डेवलपर्स द्वारा समझा जाता है, और भ्रम पैदा नहीं करेगा (अगर मैंने कुछ उपयोग देखा एक संस्करण संख्या का जोनहीं थामैं कुछ समय बिताना चाहता था कि Version नौकरी के लिए पर्याप्त नहीं था, अगर यह महत्वपूर्ण साबित हुआ और एक बुरा आश्चर्य छुपाया। अगर यह नौकरी के लिए काफी अच्छा था, तो मैं उस समय अपना समय बर्बाद करने वाले डेवलपर पर चिंतित होगा)।

आप साधन आप विस्तार के तरीकों के साथ आसानी से incrementing के लिए चाहते हैं के साथ सौदा कर सकते हैं:

public static Version IncrementMajor(this Version ver) 
{ 
    return new Version(ver.Major + 1, 0); 
} 
public static Version IncrementMinor(this Version ver) 
{ 
    return new Version(ver.Major, ver.Minor + 1); 
} 
बेशक
+0

सुनिश्चित नहीं है कि आपका समाधान इतना कम क्यों है। मेरी राय में हमें हमेशा संभव होने पर मौजूदा कार्यान्वयन का उपयोग करना चाहिए। –

+1

मैं उसे एक अपवर्त देना चाहता हूं, लेकिन मैंने दिन के लिए अपना कोटा इस्तेमाल किया है, इसलिए मुझे वापस आना होगा और कल एक अपवर्तना जोड़नी होगी। स्पष्ट रूप से यहां सबसे अच्छा जवाब। –

+0

कम से कम अच्छा है कि ओपी ने अपने जवाब से जॉन हन्ना के जवाब में चेकमार्क बदल दिया है, उसके उत्तर में शीर्ष पर दिखाया गया है। –

5

कैसे दो पूर्णांकों के बारे में? प्रमुख और एक मामूली संशोधन के लिए एक? एक प्रमुख और एक नाबालिग:

+0

! धन्यवाद। – Jamie

1

मैं दो पूर्णांकों सुझाव है। यदि आप एक चर चाहते हैं तो आप इसे major * 1000 + minor के रूप में भी स्टोर कर सकते हैं।

1

दशमलव ऊपर दिए गए का सबसे अच्छा होना चाहिए, लेकिन अन्य के रूप में उल्लेख किया गया है दो ints बेहतर होगा।

डबल्स और तैरता सही रूप में, सब दशमलव मान की दुकान नहीं है आप अपने संस्करण अचानक 1,219999999999999999

+5

और जब आप '0.1' से' 0.9' जोड़ते हैं, तो आपको '0.10' नहीं मिलेगा, क्योंकि ओपी चाहता था ... – Oded

2

हो इस

public struct VersionNumber : IComparable<ReleaseNumber> 
{ 
    public int MajorVersion{get;set;} 
    public int MinorVersion{get;set;} 

    public VersionNumber(int major, int minor) 
    { 
    MajorVersion = major; 
    MinorVersion = minor; 
    } 

    public override string ToString(){ 
    return major + '.' + minor; 
    } 

    public int CompareTo(VersionNumber other) { 
    int result; 
    result = MajorVersion.CompareTo(other.MajorVersion); 
    if (result != 0) { return result; } 
    return MinorVersion.CompareTo(other.MinorVersion); 
    } 
    public static bool operator <(VersionNumber left, VersionNumber right) { 
    return left.CompareTo(right) < 0; 
    } 
    public static bool operator <=(VersionNumber left, VersionNumber right) { 
    return left.CompareTo(right) <= 0; 
    } 
    public static bool operator >(VersionNumber left, VersionNumber right) { 
    return left.CompareTo(right) > 0; 
    } 
    public static bool operator >=(VersionNumber left, VersionNumber right) { 
    return left.CompareTo(right) >= 0; 
    } 
} 

तुम भी एक comparer जोड़ सकते हैं के लिए अपने स्वयं के डेटा प्रकार बनाने के लिए नहीं करना चाहते हैं ताकि आप दो संस्करण संख्याओं को देख सकें ताकि उदाहरण के लिए दो संस्करण संख्याओं का उच्चतम संस्करण कौन सा हो।

संपादित

जोड़ा गया comparer अच्छा उपाय :)

+0

अंत में, मेरे पास संरचना का उपयोग करने का एक कारण है। धन्यवाद। – Jamie

+5

'System.Version' पहले से ही यह करता है। –

+0

मेरी इच्छा है कि मैं + जॉन हन्ना का जवाब दोबारा कर सकता हूं। पहिया – Kell