2012-06-16 10 views
10

की शुरुआत से दशमलव निकालें मेरे पास 5.5kg या 7.90gram जैसी स्ट्रिंग है और मैं दशमलव मान के रूप में 5.5 या 7.90 प्राप्त करना चाहता हूं। मैं सी # में ऐसा परिणाम कैसे प्राप्त कर सकता हूं और एक और बात यह है कि मेरी स्ट्रिंग हमेशा दशमलव के साथ शुरू होगी।स्ट्रिंग

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

string weight = attributeValue; 
if (!string.IsNullOrEmpty(weight)) 
{ 
    product.Weight = Convert.ToDecimal(attributeValue); 
} 
else 
{ 
    product.Weight = 0.00m; 
} 
+0

उपयोग TryParse() है। –

उत्तर

28

मैं अग्रणी संख्या भाग से मेल खाने वाली नियमित अभिव्यक्ति तैयार करूंगा। यह आंशिक रूप से है कि क्या आप हमेशा एक दशमलव बिंदु होगा पर निर्भर करेगा, चाहे आप हजारों विभाजक के लिए अल्पविराम का अनुमति देनी है या यह हमेशा दशमलव बिंदु, आदि के रूप . का उपयोग करेगा हालांकि यह कुछ इस तरह लग सकता है चाहता हूँ:

^-?\d+(?:\.\d+)? 

फिर अपने पाठ के खिलाफ है कि रेगुलर एक्सप्रेशन से मेल, मैच के मान ले (अगर यह सफल है) और है कि मूल्य पर decimal.Parse या double.Parse का उपयोग करें:

Regex regex = new Regex(@"^-?\d+(?:\.\d+)?"); 
Match match = regex.Match(text); 
if (match.Success) 
{ 
    weight = decimal.Parse(match.Value, CultureInfo.InvariantCulture); 
} 

ध्यान दें कि इस तरह के बड़े पैमाने के रूप "प्राकृतिक" मूल्यों के लिए , आप मई से double के साथ बेहतर हो सकता है। उत्तरार्द्ध मुद्रा के रूप में "कृत्रिम" मानों के लिए अधिक उपयुक्त है, जो स्वाभाविक रूप से दशमलव में व्यक्त किए जाते हैं और सटीक मूल्य होते हैं। यह इस बात पर निर्भर करता है कि आप क्या कर रहे हैं।

+0

वर्तमान रेगेक्स केवल '^' एंकर के कारण स्ट्रिंग की शुरुआत में फ्लोट/पूर्णांक से मेल खाएगा। स्ट्रिंग में किसी भी स्थान से संख्याओं को निकालने के लिए, '-? \ D + (?: \। \ D +)?' का उपयोग करें। या '[- +]? [0-9] * \।? [0-9] + (?: [ईई] [- +]? [0-9] +)? –

+0

@ विकटोरस्ट्रिबीज़्यू: हाँ, क्योंकि मैं पूछा गया था कि सवाल पूछा गया: "एक और बात है कि मेरी स्ट्रिंग हमेशा दशमलव के साथ शुरू होगी"। –

+0

हां, निश्चित रूप से, शीर्षक केवल यह नहीं दर्शाता है, मुझे लगता है कि इसे संपादित किया जाना चाहिए। –

0

अपने इनपुट प्रारूप के लिए आप अगर अपने इनपुट स्ट्रिंग अलग स्वरूप में है इस कोड से दशमलव प्राप्त कर सकते हैं

var weight =Decimal.Parse(Regex.Match(input_string, "[0-9]*\\.*[0-9]*").Value); 

तो आप regex पैटर्न बदलना होगा।

2

यहाँ एक पूरी तरह से अलग दृष्टिकोण

string oldstr = "1.7meter"; 
     Char[] strarr = oldstr.ToCharArray().Where(c => Char.IsDigit(c) || Char.IsPunctuation(c)).ToArray(); 
     decimal number = Convert.ToDecimal(new string(strarr)); 
संबंधित मुद्दे