दिलचस्प पोस्ट
मैं पायथन में एक नई लाइन कैसे निर्दिष्ट करूं? जावा वेबपैड में मैं अपने सर्वर पर एक छवि को कैसे सहेज और पुनः प्राप्त करता हूं दृश्य में नरम कीबोर्ड इनपुट कैप्चर कैसे करें? सूची ड्रॉपडाउन सूची में विशेषताएँ पोस्टबैक पर खो जाती हैं? LEFT OUTER पर एसक्यूएल प्रदर्शन में मौजूद नहीं है विंडोज कंसोल से कर्ल आदेश चलाएँ अनसाइन्ड इन्टर का बह निकला क्यों "छोड़कर: पास" एक खराब प्रोग्रामिंग अभ्यास है? मैं अपने .NET 3.5 वेब अनुप्रयोगों में ASP.NET AJAX नियंत्रण टूलकिट को कैसे स्थापित और उपयोग कर सकता हूं? कोणीय – वादे बनाम अवलोकन मैं शैल स्क्रिप्ट्स में $ PATH तत्वों को हेरफेर कैसे करूं? कैसे एक एसक्यूएल सर्वर संग्रहीत कार्यविधि में एक सरणी को पारित करने के लिए रिएक्टजेएस कॉल पेरेंट मेथड इरादा के लिए यूआरआई कैसे पास करें? # जावा में परिभाषित

उचित संस्कृति के साथ स्ट्रिंग को दोहरे रूपांतरित करने के लिए कैसे करें

मेरे पास डेटाटाइप और डीफॉल्ट वैल्यू को स्टोर करने के लिए एक डाटाबेस में दो नवरर्चार फ़ील्ड हैं, और मेरे पास एक डेटाटाइप डबल है और अंग्रेजी प्रारूप में 65.89875 के रूप में मान है।

अब मैं चाहता हूं कि उपयोगकर्ता को चयनित ब्राउज़र भाषा प्रारूप के अनुसार मूल्य (अंग्रेजी में 65.89875 जर्मन में 65,8 9 875 के रूप में प्रदर्शित किया जाना चाहिए) को देखने के लिए। अब अगर उपयोगकर्ता जर्मन प्रारूप से 65,89875 संपादित करता है जो अंग्रेजी में 65.89875 समकक्ष है, और एक अंग्रेजी ब्राउज़र से दूसरे उपयोगकर्ता के विचार यह 658 9 875 के रूप में आता है।

ऐसा इसलिए होता है क्योंकि डेटाबेस में इसे नर्वचर स्तंभ में 65,8 9 875 के रूप में संग्रहित किया गया था और जब वह अंग्रेजी संस्कृति का उपयोग करते हुए परिवर्तित हो जाता है तो यह 658 9 875 हो जाता है क्योंकि यह एक विभाजक के रूप में है जो जर्मन के लिए एक दशमलव ऑपरेटर है।

मैं इसे सभी ब्राउज़रों के लिए कैसे काम करूं?

वेब के समाधान से एकत्रित समाधान "उचित संस्कृति के साथ स्ट्रिंग को दोहरे रूपांतरित करने के लिए कैसे करें"

आपको एक सिंगल लोकेल को परिभाषित करने की आवश्यकता है, जिसे आप डेटाबेस में संग्रहीत डेटा के लिए उपयोग करेंगे, यथासंभव असल संस्कृति इसी उद्देश्य के लिए है।

जब आप मूल प्रकार में कनवर्ट करते हैं और फिर उपयोगकर्ता की संस्कृति के लिए प्रारूप करते हैं

प्रदर्शित करने के लिए उदाहरण:

 string fromDb = "123.56"; string display = double.Parse(fromDb, CultureInfo.InvariantCulture).ToString(userCulture); 

स्टोर करने के लिए:

 string fromUser = "132,56"; double value; // Probably want to use a more specific NumberStyles selection here. if (!double.TryParse(fromUser, userCulture, NumberStyles.Any, out value)) { // Error... } string forDB = value.ToString(CultureInfo.InvariantCulture); 

पुनश्च। यह, लगभग, बिना कहने के बिना जाता है कि डेटा से मेल खाने वाला डेटाटाइप के साथ एक कॉलम का उपयोग करना बेहतर होगा (लेकिन कभी-कभी लीगेसी लागू होगा)।

आप वैल्यू यूजर को डबल में प्रदान करने में परिवर्तित कर सकते हैं और इसे स्वरूप प्रदाता की सहायता से नर्वचर के रूप में फिर से संग्रहीत कर सकते हैं । CultureInfo एक विशिष्ट प्रारूप प्रदाता है यह मानते हुए कि आप जिस परिस्थितिकी में काम कर रहे हैं,

 System.Globalization.CultureInfo EnglishCulture = new System.Globalization.CultureInfo("en-EN"); System.Globalization.CultureInfo GermanCulture = new System.Globalization.CultureInfo("de-de"); 

निक्सेरी परिवर्तन करने के लिए पर्याप्त होगा, जैसे;

 double val; if(double.TryParse("65,89875", System.Globalization.NumberStyles.Float, GermanCulture, out val)) { string valInGermanFormat = val.ToString(GermanCulture); string valInEnglishFormat = val.ToString(EnglishCulture); } if(double.TryParse("65.89875", System.Globalization.NumberStyles.Float, EnglishCulture, out val)) { string valInGermanFormat = val.ToString(GermanCulture); string valInEnglishFormat = val.ToString(EnglishCulture); } 

मेरे टूलबल्ट में मेरे पास यह समारोह बहुत पहले साल से है (सभी फ़ंक्शन और वेरिएबल नाम गन्दा हैं और स्पैनिश और अंग्रेजी मिश्रण करते हैं, इसके लिए खेद है)।

यह उपयोगकर्ता का उपयोग करने देता है , और . दशकों को अलग करने के लिए और अगर दोनों प्रतीकों का उपयोग किया जाता है तो सर्वोत्तम करने का प्रयास करेगा

  Public Shared Function TryCDec(ByVal texto As String, Optional ByVal DefaultValue As Decimal = 0) As Decimal If String.IsNullOrEmpty(texto) Then Return DefaultValue End If Dim CurAsTexto As String = texto.Trim.Replace("$", "").Replace(" ", "") ''// You can probably use a more modern way to find out the ''// System current locale, this function was done long time ago Dim SepDecimal As String, SepMiles As String If CDbl("3,24") = 324 Then SepDecimal = "." SepMiles = "," Else SepDecimal = "," SepMiles = "." End If If InStr(CurAsTexto, SepDecimal) > 0 Then If InStr(CurAsTexto, SepMiles) > 0 Then ''//both symbols was used find out what was correct If InStr(CurAsTexto, SepDecimal) > InStr(CurAsTexto, SepMiles) Then ''// The usage was correct, but get rid of thousand separator CurAsTexto = Replace(CurAsTexto, SepMiles, "") Else ''// The usage was incorrect, but get rid of decimal separator and then replace it CurAsTexto = Replace(CurAsTexto, SepDecimal, "") CurAsTexto = Replace(CurAsTexto, SepMiles, SepDecimal) End If End If Else CurAsTexto = Replace(CurAsTexto, SepMiles, SepDecimal) End If ''// At last we try to tryParse, just in case Dim retval As Decimal = DefaultValue Decimal.TryParse(CurAsTexto, retval) Return retval End Function 

आप अपनी UI संस्कृति को किसी भी चीज में बदल सकते हैं, लेकिन आपको इस तरह से नंबर विभाजक को बदलना चाहिए:

 CultureInfo info = new CultureInfo("fa-IR"); info.NumberFormat.NumberDecimalSeparator = "."; Thread.CurrentThread.CurrentCulture = info; Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture; 

इसके साथ, आपकी स्ट्रिंग इस तरह के रूप में परिवर्तित हो जाती है: "12.49" या "12/49" के बजाय "12.49"

मैंने एमएसडीएन से कुछ मदद की, लेकिन यह मेरा जवाब है:

 double number; string localStringNumber; string doubleNumericValueasString = "65.89875"; System.Globalization.NumberStyles style = System.Globalization.NumberStyles.AllowDecimalPoint; if (double.TryParse(doubleNumericValueasString, style, System.Globalization.CultureInfo.InvariantCulture, out number)) Console.WriteLine("Converted '{0}' to {1}.", doubleNumericValueasString, number); else Console.WriteLine("Unable to convert '{0}'.", doubleNumericValueasString); localStringNumber =number.ToString(System.Globalization.CultureInfo.CreateSpecificCulture("de-DE"));