2014-12-31 8 views
10

आईएएम सी # में नया है और फ़ाइल से float मूल्य (x, y, z) पढ़ने की आवश्यकता है। ऐसा लगता है कि:सी # फ्लोट। पर्स स्ट्रिंग

0 -0,01 -0,002

0,000833333333333 -0,01 -0,002

Iam प्रत्येक पंक्ति से मूल्यों को पढ़ने के लिए कोशिश कर रहा है, तो

float number = float.Parse("0,54"); // it works well, but 
float number = float.Parse("0.54"); // gains exepction. 

मेरे कोड (बग किया जा सकता है):

int begin = 0; 
int end = 0; 
for (int i = 0; i < tempLine.Length; i++) 
{ 
    if (Char.IsWhiteSpace(tempLine.ElementAt(i))) 
    { 
     end = i; 
     float value = float.Parse(tempLine.Substring(begin, end)); 
     begin = end; 
     System.Console.WriteLine(value); 
    } 
} 

कोई मदद कर सकता है?

+0

मैं 'float.Parse' आदि – geedubb

उत्तर

15

float.Parse(string) method डिफ़ॉल्ट रूप से आपकी वर्तमान संस्कृति सेटिंग्स का उपयोग करता है। अपने CurrentCulture के NumberDecimalSeparator property की तरह लग रहा , नहीं .

है यही कारण है कि आप अपने "0.54" उदाहरण में FormatException मिलता है।

एक समाधान के रूप में, आप एक संस्कृति . एक NumberDecimalSeparator रूप InvariantCulture की तरह एक दूसरे पैरामीटर के रूप में Parse विधि में उपयोग कर सकते हैं, या आप अपने CurrentCulture.Clone() और यह NumberDecimalSeparator संपत्ति . को

float number = float.Parse("0.54", CultureInfo.InvariantCulture); 

या

है सेट कर सकते हैं
var culture = (CultureInfo)CultureInfo.CurrentCulture.Clone(); 
culture.NumberFormat.NumberDecimalSeparator = "."; 
float number = float.Parse("0.54", culture); 
5

ऐसा लगता है कि आपकी संस्कृति comma दशमलव पृथक के रूप में उपयोग करती है या। InvariantCulture

var value = float.Parse(tempLine.Substring(begin, end), CultureInfo.InvariantCulture); 

साथ यह पार्स करने इस के अलावा की कोशिश करें, जिस तरह से आप पंक्तियों को पार्सिंग से यह होना चाहिए अधिक जटिल है। तुम बस के बजाय सूचकांक के साथ सौदा करने की कोशिश कर की लाइन विभाजित कर सकते हैं:

foreach(var str in tempLine.Split()) 
{ 
    float value = float.Parse(str, CultureInfo.InvariantCulture); 
} 
+0

आह मैं स्प्लिट सुझाव देने के लिए जा रहा था के साथ सरणी अंतरिक्ष से स्ट्रिंग विभाजित था और फिर पाश लेकिन आउटपुट के रूप में एक फ्लोट [] के बारे में सोच रहा था इसलिए किसी भी लूप की आवश्यकता नहीं थी। 'फ्लोट [] temp = float.Parse (tempLine.Split());' – Edward

+0

क्षमा करें यह 'फ्लोट [] temp = tempLine.Split() चुनें। (X => float.Parse (x))। ToArray(); ' – Edward

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