2011-02-12 17 views
22

Int में बदलें मैं एक स्ट्रिंग "246246.246" है कि मैं IConvertable इंटरफेस, ToInt16, ToInt32, ToIn64 को पारित करने के लिए करना चाहते हैं। दशमलव स्थान के साथ एक पूर्णांक में स्ट्रिंग को पार्स करने का सबसे अच्छा तरीका क्या है?सी # स्ट्रिंग दशमलव

यह एक समाधान है, लेकिन वहाँ एक बेहतर समाधान है?

string value = "34690.42724"; 
Convert.ToInt64(Convert.ToDouble(value)); 
+0

क्या आप दशमलव भागों को ट्रिम करने या बस ट्रिम करने से चिंतित हैं? –

+2

जब आप तारों को संख्याओं में परिवर्तित करते हैं तो हमेशा संस्कृतिइंफो का उपयोग करें। – xsl

+0

निकटतम पूर्ण संख्या में घूमना ठीक होगा। अधिकांश समय यह 99.9 99 99 99 99 99 जैसी चीजें होगी और मैं 100 तक गोल करना चाहता हूं। – Mike

उत्तर

40

गोलाई तुम कर सकते हो इस छूट ऐसा करने के लिए:

Convert.ToInt64(Math.Floor(Convert.ToDouble(value))); 

आप पूर्णांक बनाना आप Math.Round साथ Math.Floor बदल सकते की जरूरत है।

संपादित करें: जब से तुम एक टिप्पणी में कहा कि आप यह गोलाई कर दिया जाएगा:

Convert.ToInt64(Math.Round(Convert.ToDouble(value))); 

आप के बारे में स्थानीयकरण/वैश्वीकरण तो चिंता करने की ज़रूरत है, तो के रूप में @xls कहा था कि आप रूपांतरण में CultureInfo आवेदन करना चाहिए ।

संपादित करें 2: वैकल्पिक विधि एक स्ट्रिंग समारोह का उपयोग कर (बहुत सुंदर नहीं IMO - हो सकता है कि यह एक विधेय समारोह के साथ elegantized किया जा सकता है):

Convert.ToInt64(value.Substring(0, value.IndexOf('.') > 0 ? value.IndexOf('.') : value.Length)); 
+1

तो ऐसा लगता है कि ऐसा करने का कोई विशेष तरीका नहीं है। आप बस कॉवर्ट() फिर कनवर्ट करें() फिर से। – Mike

+2

@ माइक - कभी-कभी दो बिंदुओं के बीच सबसे छोटी दूरी एक सीधी रेखा है। कुछ स्तर पर आपको कनवर्ट करना होगा। आप इसे कुछ स्ट्रिंग फ़ंक्शंस के साथ संभवतः छोटा कर सकते हैं। –

+2

आपको मूल्य को गोल करने की आवश्यकता नहीं है क्योंकि ToInt64 (डबल) पहले से ही गोलाकार संस्करण देता है – deepee1

8

आप ToInt64 के रूप में मूल्य का दौर समाप्त नहीं करना चाहिए (डबल) गोलाकार संस्करण पहले से ही

 string value = "246246.246"; 
     Convert.ToInt64(Convert.ToDouble(value)); 
1

यदि आप वास्तव में सटीकता के बारे में चिंता करते हैं लेकिन गति के बारे में नहीं तो दशमलव प्रकार बेहतर होगा।

(long)Math.Round(decimal.Parse(value)); 
0

इस स्ट्रिंग मान लिया जाये कि उपयोगकर्ता इनपुट से आता है, तो आप शायद संख्या स्टाइल को पकड़ने के लिए चाहते हैं। इसे पुन: प्रयोज्य फ़ंक्शन के माध्यम से चलाएं ...

int? ConvertToNumber(string value) 
{ 
    if (value == string.Empty) return null; 

    try 
    { 
     var dec = decimal.Parse(value, 
      NumberStyles.AllowDecimalPoint | 
      NumberStyles.Number | 
      NumberStyles.AllowThousands); 

     return (int)Math.Round(dec); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine("Please input a number."); 
     return null; 
    } 
} 
संबंधित मुद्दे