2008-09-29 10 views
34

सीएसएचआरपी में एक फ्लोट का विश्लेषण करने का सबसे अच्छा तरीका क्या है? मुझे ट्राईपर्स के बारे में पता है, लेकिन मैं विशेष रूप से डॉट्स, कॉमा इत्यादि के बारे में सोच रहा हूं।फ्लोट पार्स करने का सबसे अच्छा तरीका?

मुझे अपनी वेबसाइट के साथ समस्याएं आ रही हैं। मेरे देव सर्वर पर, ',' decimals के लिए है, '।' विभाजक के लिए। प्रोड सर्वर पर हालांकि, यह एक और तरीका है। मैं इसे कैसे कैप्चर कर सकता हूं?

+1

ऐसा लगता है क्योंकि ऐसा लगता है कि हर कोई ऐसा कर रहा है। मैं व्यक्तिगत रूप से <3 चार खोज शब्दों से दूर रखने की कोशिश करता हूं। सोचो कि यह कुछ ऐसा है जो पारित समय से मेरे साथ अटक गया जब सभी खोजों को> 3 वर्ण होना चाहिए। इसके अलावा # संकेत मेरे स्पाइडर संतों को झुकाता है। –

उत्तर

23

निर्भर करता है कि इनपुट कहां से आ रहा है।

यदि आपका इनपुट उपयोगकर्ता से आता है, तो आपको CountryInfo का उपयोग करना चाहिए उपयोगकर्ता/पृष्ठ (Thread.CurrentThread.CurrentUICulture) का उपयोग कर रहा है।

HttpRequest.UserLanguages संपत्ति को देखकर आप उपयोगकर्ता की संस्कृति का संकेत और संकेत प्राप्त कर सकते हैं। (100% सही नहीं है, लेकिन मुझे यह बहुत अच्छा लगता है) उस जानकारी के साथ, आप पृष्ठ की शुरुआत में Thread.CurrentThread.CurrentUICulture सेट कर सकते हैं।

यदि आपका इनपुट किसी आंतरिक स्रोत से आता है, तो आप स्ट्रिंग को पार्स करने के लिए InvariantCulture का उपयोग कर सकते हैं।

यदि आपका इनपुट किसी नियंत्रित स्रोत से है, तो पार्स विधि का उपयोग करना थोड़ा आसान है। यही है, आप पहले ही स्ट्रिंग को मान्य कर चुके हैं। पार्स विफल होने पर एक (धीमी) अपवाद फेंकता है।

यदि इनपुट अनियंत्रित है, (उपयोगकर्ता से, या अन्य इंटरनेट स्रोत से) TryParse मेरे लिए बेहतर दिखता है।

3

कोशिश/पार्स के साथ पार्स करते समय एक तटस्थ संस्कृति (या जिसे आप जानते हैं) का उपयोग करें।

5

यदि आप आंतरिक उद्देश्य के लिए लगातार मूल्य (संख्या, दिनांक, समय, आदि ...) चाहते हैं। & पार्सिंग मान बनाने के लिए हर बार "InvariantCulture" का उपयोग करें। "InvariantCulture" हर कंप्यूटर पर एक ही है, किसी भी उपयोगकर्ता के संस्कृति/भाषा/आदि के साथ हर ओएस ...

string strFloat = (15.789f).ToString(System.Globalization.CultureInfo.InvariantInfo); 
float numFloat = float.Parse(System.Globalization.CultureInfo.InvariantInfo, strFloat); 
string strNow = DateTime.Now.ToString(System.Globalization.CultureInfo.InvariantInfo); 
DateTime now = DateTime.Parse(System.Globalization.CultureInfo.InvariantInfo, strNow); 
+0

सच है, लेकिन वास्तव में सवाल से संबंधित नहीं है। –

1

में पास एक CultureInfo या NumberFormatInfo कि संस्कृति के रूप में आप नाव पार्स करने के लिए चाहते हैं प्रतिनिधित्व करता है; यह नियंत्रित करता है कि दशकों, समूह विभाजक, आदि के लिए कौन से पात्रों का उपयोग किया जाता है

उदाहरण के लिए '।' चरित्र को दशमलव संकेतक के रूप में माना जाता था जिसे आप CultureInfo.InvariantCulture में पारित कर सकते हैं (यह आमतौर पर सर्वर अनुप्रयोगों में बहुत उपयोगी होता है जहां आप पर्यावरण की संस्कृति के बावजूद चीजों को समान बनाना चाहते हैं)।

41

मैं लेप्पी के उत्तर से सहमत हूं; डाल करने के लिए है कि कोड के संदर्भ में:

string s = "123,456.789"; 
float f = float.Parse(s, CultureInfo.InvariantCulture); 
5

आप हमेशा Parse जो संस्कृति उपयोग करने के लिए भी शामिल है अधिभार इस्तेमाल कर सकते हैं?

उदाहरण के लिए

:

Double number = Double.Parse("42,22", new CultureInfo("nl-NL").NumberFormat); // dutch number formatting 

आप अपने सभी डेटा पर नियंत्रण है, तो आप "CultureInfo.InvariantCulture" अपने कोड के सभी में इस्तेमाल करना चाहिए।

0

फ्लोट से बचने की कोशिश करें। पर्स, इसके बजाय TryParse का उपयोग करें क्योंकि यह बहुत बेहतर प्रदर्शन करता है लेकिन वही काम करता है। यह भी डबल, डेटटाइम, आदि पर लागू होता है ...

(कुछ प्रकार के भी TryParseExact की पेशकश जो भी और भी बेहतर प्रदर्शन करती है!)

+1

क्या सभी डेटा मान्य होने पर भी TryParse वास्तव में तेज़ी से काम करता है? मैं उम्मीद करता हूं कि उन्हें "सफलता" मामले में एक ही प्रदर्शन करना होगा, लेकिन अपवाद फेंकने की लागत के कारण पर्स की तुलना में ट्राईपर्स के साथ तेजी से विफल होने की विफलता के लिए। –

+0

और फिर फिर, अगर TryParse झूठी वापसी करता है - क्या आप अपवाद फेंकने जा रहे हैं? उस मामले में फ्लोट। Trase TryParse से अधिक कुशल है! – Sklivvz

+0

यदि आपके द्वारा पाई जाने वाली तार अधिकतर मान्य फ़्लोट हैं, तो tryparse निश्चित रूप से तेज़ है। यदि आपके पास बहुत से अलग स्ट्रिंग हैं तो शायद पार्स बेहतर विकल्प है, लेकिन जब बहुत सारे स्ट्रिंग (हजारों हजारों) प्राप्त होते हैं जो सभी (99% मामलों में) स्ट्रिंग प्रस्तुति में मान्य फ्लोट करते हैं, तो tryparse का उपयोग करें। –

0

स्रोत किसी वेबसाइट से कोई इनपुट है। मैं वैध होने पर भरोसा नहीं कर सकता। तो मैं पहले उल्लेख के रूप में TryParse के साथ चला गया। लेकिन मैं यह नहीं समझ सकता कि वर्तमान संस्कृति को कैसे देना है।

इसके अलावा, यह मेरे सर्वर यह वर्तमान पर चल रहा है की संस्कृति देना होगा, लेकिन चूंकि यह वर्ल्ड वाइड वेब है, उपयोगकर्ता कहीं से भी हो सकता है ...

-1

के बाद से आप वेब उपयोगकर्ता की पता नहीं है संस्कृति, आप कुछ अनुमान लगा सकते हैं। विभाजक के लिए उपयोग की जाने वाली संस्कृति के साथ TryParse। दशमलव के लिए, और Tryparse का उपयोग करने वाली संस्कृति के साथ। विभाजक के लिए और दशमलव के लिए। यदि वे दोनों सफल होते हैं लेकिन अलग-अलग उत्तर देते हैं तो आपको उस उपयोगकर्ता से पूछना होगा जिसका वे इरादा रखते हैं। अन्यथा आप सामान्य रूप से आगे बढ़ सकते हैं, आपके दो बराबर परिणाम या एक प्रयोग योग्य परिणाम या कोई उपयोगी परिणाम नहीं दिया जा सकता है।

+0

यदि आप स्वीकार किए गए उत्तर को चिह्नित करने जा रहे हैं तो कम से कम बताएं कि आप क्यों हैं इसे चिह्नित करना ... –

+0

यह उत्तर स्वीकार करने से पहले चिह्नित किया गया था। असल में मैं यह देखकर आश्चर्यचकित हूं कि यह स्वीकार कर लिया गया था, क्योंकि किसी और ने HttpRequest.UserLanguages ​​संपत्ति को देखने का सुझाव दिया था। मुझे लगता है कि मेरा जवाब यद्यपि दूसरे स्थान पर होना चाहिए। –

+0

ओह, अब इसे स्वीकार करने के बाद दूसरी बार चिह्नित किया गया है। मैं अब उस सुझाव से सहमत हूं, जो भी स्वीकृति के बाद इसे चिह्नित करता है उसे कम से कम क्यों समझा जाना चाहिए। –

0

आप एक सरल बयान के साथ अपने सर्वर की वर्तमान Cuklture पता कर सकते हैं:

System.Globalization.CultureInfo culture = System.Globalization.CultureInfo.CurrentCulture; 

ध्यान दें कि वहाँ आईडी एक CurrentUICulture संपत्ति है, लेकिन UICulture ResourceMeanager प्रपत्र करना Crecorder अनुप्रयोगों से प्रयोग किया जाता है। संख्या स्वरूपण के लिए, आपको वर्तमान संस्कृति का ध्यान रखना चाहिए।

मुझे उम्मीद है कि यह आपकी मदद करेगा

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

  • कोई संबंधित समस्या नहीं^_^