मैं स्ट्रिंग को लंबे समय से सी # में डेटा कैसे बदल सकता हूं


101

मैं स्ट्रिंग को लंबे समय से C # में डेटा कैसे बदल सकता हूं?

मेरे पास डेटा है

String strValue[i] ="1100.25";

अब में चाहता हूँ

long l1;

1
चिमटे पूर्णांक का प्रतिनिधित्व करते हैं। आपने एक गैर-पूर्णांक दिया है। आप उसके साथ क्या करना चाहेंगे?
जॉन स्कीट

1
क्या होगा अगर strValue "1100.75" है? देखें: stackoverflow.com/questions/633335/…
मैग्मा

@ मग्मा: यदि आप इसे दशमलव में परिवर्तित करते हैं तो यह संख्या से अलग हो जाएगा, अर्थात इस स्थिति में यदि संख्या 1100.75 होगी तो यह 1101 आउटपुट करेगा।
प्यार कंप्यूटर विज्ञान

1
@charlie मैं केवल इस मुद्दे को उठा रहा था, क्योंकि यहाँ निहितार्थ के बारे में पूरी तरह से जानकारी नहीं थी। वह बिना किसी पूर्णांक के केवल बिना पूर्णांक वाले हिस्से से छुटकारा पा सकता है, और यह ठीक है, बशर्ते कि यह वास्तव में वही हो जो वह चाहता है। फिर भी आपका धन्यवाद।
मैग्मा

जवाबों:


187

यह उत्तर अब काम नहीं करता है, और मैं कुछ भी बेहतर नहीं कर सकता तो अन्य उत्तर (नीचे देखें) यहां सूचीबद्ध हैं। कृपया उनकी समीक्षा करें और उन्हें वोट दें।

Convert.ToInt64("1100.25")

MSDN से विधि हस्ताक्षर:

public static long ToInt64(
    string value
)

3
मैंने इस तरह से इसे किया। सही उत्तर के रूप में चिह्नित किया जाना चाहिए।
sanpaco

2
यह सही प्रारूप अपवाद में स्ट्रिंग नहीं देगा।
बधोन जैन

यह काम नहीं करता है। सिस्टम प्रारूप अपवाद त्रुटि। वर्णों के साथ कुछ समस्या एक गलत प्रारूप में है।
रिकार्डो अराउजो जूल

यह सही है .... यह अब काम नहीं करता है, जैसा कि 2013 में हुआ था। मैं जल्द ही एक अपडेट पोस्ट करूंगा।
विल बेलमैन

46

यदि आप उस संख्या का पूर्णांक भाग प्राप्त करना चाहते हैं, तो आपको पहले इसे एक अस्थायी संख्या में परिवर्तित करना होगा, फिर लंबे समय तक डालना होगा।

long l1 = (long)Convert.ToDouble("1100.25");

आप Mathवर्ग का उपयोग संख्या को गोल करने के लिए कर सकते हैं, जैसा कि आप चाहते हैं, या सिर्फ छोटा ...


FormatExceptionयदि आप इसे निर्दिष्ट इनपुट पर चलाते हैं तो यह आपको देने वाला है ।
एंड्रयू सविनाख

1
@zespri, नहीं, कम से कम अधिकांश संस्कृतियों में नहीं ... लेकिन यह वास्तव में उन संस्कृतियों में विफल होगा जहां दशमलव विभाजक नहीं है। "
थॉमस लेवेस्क

15

तुम भी उपयोग कर सकते हैं long.TryParseऔर long.Parse

long l1;
l1 = long.Parse("1100.25");
//or
long.TryParse("1100.25", out l1);



3

लंबे समय से आंतरिक रूप से System.Int64 के रूप में प्रतिनिधित्व किया जाता है जो 64-बिट हस्ताक्षरित पूर्णांक है। आपने "1100.25" जो मान लिया है वह वास्तव में दशमलव है और पूर्णांक नहीं है इसलिए इसे लंबे समय तक परिवर्तित नहीं किया जा सकता है।

आप उपयोग कर सकते हैं:

String strValue = "1100.25";
decimal lValue = Convert.ToDecimal(strValue);

इसे दशमलव मान में बदलने के लिए



1

आप Int64.TryParseमेथड का इस्तेमाल करके भी कर सकते हैं । यदि उनका कोई स्ट्रिंग मान है तो यह '0' लौटाएगा, लेकिन कोई त्रुटि उत्पन्न नहीं करेगा।

Int64 l1;

Int64.TryParse(strValue, out l1);

1

आप अपना स्वयं का रूपांतरण कार्य बना सकते हैं:

    static long ToLong(string lNumber)
    {
        if (string.IsNullOrEmpty(lNumber))
            throw new Exception("Not a number!");
        char[] chars = lNumber.ToCharArray();
        long result = 0;
        bool isNegative = lNumber[0] == '-';
        if (isNegative && lNumber.Length == 1)
            throw new Exception("- Is not a number!");

        for (int i = (isNegative ? 1:0); i < lNumber.Length; i++)
        {
            if (!Char.IsDigit(chars[i]))
            {
                if (chars[i] == '.' && i < lNumber.Length - 1 && Char.IsDigit(chars[i+1]))
                {
                    var firstDigit = chars[i + 1] - 48;
                    return (isNegative ? -1L:1L) * (result + ((firstDigit < 5) ? 0L : 1L));    
                }
                throw new InvalidCastException($" {lNumber} is not a valid number!");
            }
            result = result * 10 + ((long)chars[i] - 48L);
        }
        return (isNegative ? -1L:1L) * result;
    }

इसे और बेहतर बनाया जा सकता है:

  • प्रदर्शन बुद्धिमान है
  • सत्यापन को इस अर्थ में कठोर बनाएं कि यह वर्तमान में परवाह नहीं करता है यदि वर्ण पहले दशमलव के बाद अंक नहीं हैं
  • रूपांतरण फ़ंक्शन के पैरामीटर के रूप में गोलाई व्यवहार निर्दिष्ट करें। यह वर्तमान में राउंडिंग करता है
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.