2010-06-28 8 views
35

मैं सी # में दशमलव बिंदु को दूसरे चरित्र में बदलना चाहता हूं। मैं एक double चर valueडबल पॉइंट में दशमलव बिंदु के लिए प्रतीक कैसे बदलें। ToString()?

double value; 

है और जब मैं आदेश का उपयोग करें: मैं जानता हूँ कि मैं यह कर सकता

Console.WriteLine(value.ToString()); // output is 1,25 

:

Console.WriteLine(value.ToString(
    CultureInfo.CreateSpecificCulture("en-GB"))); // output is 1.25 

लेकिन मैं इसे बहुत ज्यादा पसंद नहीं है क्योंकि यह बहुत लंबा है और मुझे अपने कार्यक्रम में अक्सर इसकी आवश्यकता है।

क्या वास्तव में बिंदु के रूप में "दशमलव बिंदु" को सेट करने के लिए एक छोटा संस्करण है और मेरी संस्कृति में अल्पविराम सामान्य नहीं है?

उत्तर

77

कुछ शॉर्टकट संख्याफॉर्मैटइन्फो क्लास बनाने के लिए है, इसकी संख्याडिमेमलसेपरेटर प्रॉपर्टी को "।" पर सेट करें। और जब भी आपको इसकी आवश्यकता हो तो ToString() विधि को पैरामीटर के रूप में कक्षा का उपयोग करें।

NumberFormatInfo nfi = new NumberFormatInfo(); 
nfi.NumberDecimalSeparator = "."; 

value.ToString(nfi); 
+2

मुझे यह विधि अधिक पसंद है क्योंकि इसकी भाषा स्वतंत्र है! –

15

शायद मैं आपके प्रश्न के इरादे को गलत समझ रहा हूं, इसलिए यदि मैं गलत हूं, तो मुझे सही करें, लेकिन क्या आप वैश्विक स्तर पर संस्कृति सेटिंग्स को लागू नहीं कर सकते हैं, और फिर प्रत्येक लेखन कथन को अनुकूलित करने के बारे में चिंता न करें?

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB"); 
+0

ठीक है, मुझे पूरे कार्यक्रम में इसकी आवश्यकता नहीं है, मुझे इसे WPF में PathGeometry के प्रारूप में फिट करने की आवश्यकता है जहां दशमलव बिंदु अपेक्षित हैं। लेकिन यह पता चला है कि यह समाधान किसी और चीज को चोट नहीं पहुंचाता है। धन्यवाद! –

+0

@womp बहुत बेहतर उत्तर से! क्या यह उप थ्रेड पर भी लागू होता है यदि मैं इसे अपने मुख्य थ्रेड पर सेट करता हूं? मैं इस असेंबली के पूरे निष्पादन समय के लिए इस सेटिंग को लागू करना चाहता हूं। – Bitterblue

32

एक विस्तार विधि बनाएँ?

Console.WriteLine(value.ToGBString()); 

// ... 

public static class DoubleExtensions 
{ 
    public static string ToGBString(this double value) 
    { 
     return value.ToString(CultureInfo.GetCultureInfo("en-GB")); 
    } 
} 
+0

हो सकता है कि कोई व्यक्ति डाउनवॉटेड हो, क्योंकि यह एक आकर्षण की तरह काम करता है, यह वैश्विक स्तर पर cultureinfo सेट करके, एक सुंदर तरीके से किया जा सकता है। Btw। मैं डाउनवॉटर नहीं हूं।:) –

+1

@ थॉमस: वास्तव में, हालांकि जब ओपी कहता है * "मुझे अपने कार्यक्रम में अक्सर इसकी आवश्यकता होती है" *, मैंने इसका अर्थ कुछ * * अक्सर लेकिन हर बार नहीं "* के रूप में किया। – LukeH

14

आप संख्या को प्रदर्शित करने के लिए उपयोग की जाने वाली संस्कृति को बदलकर दशमलव विभाजक को बदल सकते हैं। सावधान रहें कि यह संख्या के बारे में सबकुछ बदल देगा (उदाहरण के लिए समूहबद्ध विभाजक, समूह आकार, दशमलव स्थानों की संख्या)। आपके प्रश्न से, ऐसा लगता है कि आप ऐसी संस्कृति के लिए डिफ़ॉल्ट हैं जो अल्पविरामक के रूप में अल्पविराम का उपयोग करता है।

संस्कृति बदले बिना सिर्फ दशमलव विभाजक बदलने के लिए आपको वर्तमान संस्कृति के NumberFormatInfo की NumberDecimalSeparator संपत्ति संशोधित कर सकते हैं।

Thread.CurrentCulture.NumberFormat.NumberDecimalSeparator = "."; 

यह धागे की वर्तमान संस्कृति को संशोधित करेगा। सभी आउटपुट अब बदल दिए जाएंगे, जिसका अर्थ यह है कि आप प्रत्येक प्रारूप को आउटपुट करते समय संस्कृति को बदलने के बारे में चिंता किए बिना, इच्छित प्रारूप को आउटपुट करने के लिए केवल value.ToString() का उपयोग कर सकते हैं।

(ध्यान दें कि एक neutral संस्कृति इसकी दशमलव विभाजक बदल गया है नहीं कर सकते।)

+5

यदि आप ऐसा करने का प्रयास करते हैं, तो आपको "इंस्टेंस केवल पढ़ने योग्य" त्रुटि मिलती है। –

+0

@MariusStanescu मुझे लगता है कि यह केवल तब होता है जब एक उत्तरस्थल संस्कृति का उपयोग करते हुए एड्रियनबैंक के जवाब के अंत में नोट किया जाता है। – patrickbadley

+0

@patrickbadley मैंने अभी इस समाधान की कोशिश की है और "केवल पढ़ने के लिए" त्रुटि का सामना किया है। "वॉच विंडो" क्लीरी में "संस्कृति। इन्स न्यूट्रल कल्चर" जोड़कर दिखाया गया कि संस्कृति तटस्थ नहीं थी। हालांकि, मैंने यह भी देखा कि यह केवल पढ़ा गया था। संस्कृति को क्लोन करना इस के आसपास सही तरीका प्रतीत होता है। निम्नलिखित [उत्तर] देखें (http://stackoverflow.com/a/3912937/4625305)। – AXMIM

1

आप एक Asp.Net वेब अनुप्रयोग है, तो आप भी ऐसा web.config में सेट कर सकते हैं कि यह भर में एक ही है संपूर्ण वेब एप्लिकेशन

<system.web> 
    ... 
    <globalization 
     requestEncoding="utf-8" 
     responseEncoding="utf-8" 
     culture="en-GB" 
     uiCulture="en-GB" 
     enableClientBasedCulture="false"/> 
    ... 
</system.web> 
संबंधित मुद्दे