2015-08-24 7 views
5

पर पार्स करने का प्रयास करते समय काम नहीं कर रहा है, मैं स्ट्रिंग को पार्स करने का प्रयास कर रहा हूं जिसमें दशमलव हो सकता है। मैं Int32.TryParse का उपयोग कर रहा हूं लेकिन ऐसा लगता है कि यह काम नहीं कर रहा है। यहाँTryParse एक दशमलव संख्या को एक int

private NumberStyles styles = NumberStyles.Number; 
private CultureInfo culture = CultureInfo.CurrentCulture; 
public int? ParseInt(string node) 
{ 
    int number; 
    if (Int32.TryParse(node, styles, culture.NumberFormat, out number)) 
    { 
     return number; 
    } 
    return null; 
} 

और है मेरी इकाई परीक्षण है कि

[Fact] 
public void TestParseIntWithDecimal() 
{ 
    string provided = "28.789"; 
    int expected = 28; 

    int? actual = _parser.ParseInt(provided); 

    Assert.NotNull(actual); 
    Assert.Equal(expected, actual); 
} 

जब मैं अपने इकाई परीक्षण चलाने के लिए, nullParseInt से लौट आता है और विफल हो रहा है:

यहाँ मेरी समारोह जहाँ मैं पार्स करने के लिए कोशिश है मुझे समझ में नहीं आता क्यों। मैंने सोचा कि TryParse दशमलव संख्या को पूर्णांक संख्याओं में पार्स कर सकता है।

+0

आप पहले नंबर को भी गोल कर सकते हैं, इसलिए यह एक पूर्ण संख्या है ... –

+0

लड़का, यह सवाल कैसे होना चाहिए। सरल, काम करने वाले कोड के साथ परीक्षण किया जा सकता है। अच्छा लगा। – Jonesopolis

+0

मेरे अब-हटाए गए उत्तर में मैंने 'AllowThousands' को' AllowDecimalPoint' 'के साथ भ्रमित कर दिया, जहां पूर्व अल्पविराम (संस्कृति) के आधार पर' int.Parse() 'पार्स संख्याओं को दे सकता है। कुछ संस्कृतियों में अल्पविराम दशमलव विभाजक है। यह _does_ काम करता है यदि आंशिक अंकों में केवल शून्य होते हैं (जैसा कि [दस्तावेज] (https://msdn.microsoft.com/en-us/library/zf50za27 (v = vs.110) .aspx)): http: // ideone .com/stQ9GY। – CodeCaster

उत्तर

8

Parse/TryParse विधियां बहुत सख्त हैं। वे लक्ष्य के रूप में उपयोग करने वाले किसी भी अन्य प्रकार से स्वीकार नहीं करते हैं। 28.789 स्पष्ट रूप से int नहीं है, इसलिए यह विफल हो जाता है। यदि आप दशमलव भाग को छोटा करना चाहते हैं तो आपको अभी भी इसे decimal पर पार्स करना होगा। फिर आप (int)Math.Floor(num) का उपयोग कर सकते हैं।

private NumberStyles styles = NumberStyles.Number; 
private CultureInfo culture = CultureInfo.CurrentCulture; 
public int? ParseInt(string node) 
{ 
    decimal number; 
    if (decimal.TryParse(node, styles, culture.NumberFormat, out number)) 
    { 
     return (int) Math.Floor(number); // truncate decimal part as desired 
    } 
    return null; 
} 
+0

मुझे एहसास नहीं हुआ कि TryParse कितना सख्त था। आपकी सहायता के लिए धन्यवाद. – DFord

+0

आप कथन को परिष्कृत करना चाहते हैं _ "28.789 स्पष्ट रूप से एक int नहीं है इसलिए यह विफल हो जाता है" _ कुछ हद तक, 'int। (कोशिश करें) पार्स' decimals को संभाल सकता है [जब तक आंशिक अंक सभी शून्य होते हैं] (https: // msdn.microsoft.com/en-us/library/zf50za27(v=vs.110).aspx0)। – CodeCaster

+1

@ कोडकस्टर: अच्छा बिंदु। लेकिन मैंने यह नहीं कहा है कि इनपुट स्ट्रिंग में दशमलव स्थान होते हैं तो यह विफल हो जाता है। –

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