2010-11-02 35 views
30

मैं एन दशमलव (दो या चार) और कोई हजार विभाजक के साथ एक स्ट्रिंग के लिए एक दशमलव बदलने की आवश्यकता: (एन दशमलव के साथ स्ट्रिंग के लिए डबल परिवर्तित, दशमलव विभाजक के रूप डॉट है, और कोई हजार विभाजक

'XXXXXXX डॉट) DDDDD, 'हजारों अलग करने के लिए'

CultureInfo.InvariantCulture साथ समस्या यह है कि है स्थानों है '।

अद्यतन

यह दशमलव और डबल प्रकार के लिए काम करना चाहिए।


मेरे पिछले प्रश्न: Need to convert double or decimal to string

उत्तर

71

एक decimal के लिए, ToString विधि का उपयोग करें, और अपरिवर्तनीय संस्कृति निर्दिष्ट दशमलव विभाजक के रूप अवधि पाने के लिए:

value.ToString("0.00", System.Globalization.CultureInfo.InvariantCulture) 

long प्रकार एक पूर्णांक है, इसलिए कोई अंश हिस्सा है। तुम सिर्फ एक स्ट्रिंग में स्वरूपित और कुछ शून्य बाद में जोड़ सकते हैं:

value.ToString() + ".00" 
+0

हजार विभाजक के बारे में क्या? इसका क्या नियंत्रण है? –

+0

कृपया मुझे बताएं कि "0.00" को .NET –

+1

@ कैप्टन कॉमिक द्वारा पार्स किया गया है: उदाहरण के लिए जब आप "एन 2" प्रारूप का उपयोग करते हैं, लेकिन कस्टम प्रारूप "0.00" के साथ नहीं, तो आपको हजारों विभाजक मिलते हैं। कस्टम प्रारूप "0.00" का अर्थ है "दशमलव विभाजक से पहले एक या अधिक अंक, संस्कृति निर्भर दशमलव विभाजक, और दशमलव विभाजक के ठीक बाद दो अंक"। इनवेरिएंट संस्कृति को निर्दिष्ट करके इसका दशमलव विभाजक उपयोग किया जाता है, जो एक अवधि है। – Guffa

-2

आप बस decimal.ToString()

उपयोग कर सकते हैं चार दशमलव

myDecimal.ToString("0.0000"); 
के लिए दो दशमलव

myDecimal.ToString("0.00"); 

के लिए

यह डॉट को दशमलव विभाजक के रूप में देता है, और संस्कृति के बावजूद कोई हजार विभाजक नहीं।

+12

नहीं, यह देता है संस्कृति द्वारा निर्दिष्ट दशमलव विभाजक, हमेशा अवधि नहीं। – Guffa

+4

आपकी प्रारूप स्ट्रिंग में '.' दशमलव विभाजक के लिए प्लेसहोल्डर है और शाब्दिक' .' नहीं है। तो यदि, उदाहरण के लिए, आपकी संस्कृति 'fr-FR' है तो संख्या 1,23 या 1,2345 आदि के रूप में प्रदर्शित की जाएगी – LukeH

+0

मैंने विंडोज़ में क्षेत्रीय सेटिंग्स के तहत दशमलव चार्ट को अल्पविराम में बदलने की कोशिश की, और यह अभी भी प्रिंट डॉट और अल्पविराम नहीं। किसी भी कारण से यह क्यों नहीं बदलता है, अगर यह सिर्फ प्लेसहोल्डर है? –

21

यह अपनी खुद की दशमलव विभाजक निर्दिष्ट करने के लिए वास्तव में आसान है। इसे समझने में मुझे लगभग 2 घंटे लग गए: डी। आप देखते हैं कि आप वर्तमान कहां अन्य संस्कृति है कि आप सही निर्दिष्ट उपयोग कर रहे थे? खैर, पार्सर की एकमात्र चीज एक IFormatProvider है। आप इसे एक फ़ॉर्मेटर रूप CultureInfo.CurrentCulture.NumberFormat देते हैं, यह आपके वर्तमान संस्कृति के NumberDecimalSeparator के अनुसार डबल स्वरूपित होगा। क्या मैंने किया था बस NumberFormatInfo वर्ग का एक नया उदाहरण बनाने के लिए था और सेट इसे करने के लिए जो भी विभाजक स्ट्रिंग मैं चाहता था NumberDecimalSeparator संपत्ति है। नीचे पूरा कोड:

double value = 2.3d; 
NumberFormatInfo nfi = new NumberFormatInfo(); 
nfi.NumberDecimalSeparator = "-"; 
string x = value.ToString(nfi); 

परिणाम? "2-3"

1

मैं ToString() और IFormatProvider उपयोग करने के लिए पसंद करते हैं।

double value = 100000.3 
Console.WriteLine(value.ToString("0,0.00", new CultureInfo("en-US", false))); 

आउटपुट: 10,000.30

+1

इससे समस्याएं पैदा होंगी। यदि आप अपने दशमलव प्रतीक को अल्पविराम में ओवरराइड करते हैं, तो यह ** 100,000,30 ** आउटपुट करेगा। ऐसा इसलिए है क्योंकि आप जिस संस्कृतिइन्फो का उपयोग कर रहे हैं उसके लिए निर्माता उपयोगकर्ता सेटिंग्स जैसे कि दशमलव प्रतीक का सम्मान करेगा। या तो संस्कृति इन्फॉर्मेशन का उपयोग करने का एक सुरक्षित तरीका है। इन्विरिएंट, या आप इसे इस तरह बना सकते हैं: 'नई संस्कृतिइन्फो (" एन-यूएस ", झूठी)' कन्स्ट्रक्टर को झूठ बोलने से यह उपयोगकर्ता अनुकूलन का सम्मान नहीं करता है । – Carl

1
double valor=3,14159 
string v = valor.Replace(",","."); 
Console.WriteLine(v); 

आउटपुट: 3।14159

+4

हां यह काम करता है, नहीं, यह वह नहीं है जिसे आप उपयोग करना चाहते हैं। क्या होगा यदि आपके पास 1000 पाई हैं? valor.Replace (",", "।")। बदलें ("।", ",")? Naah। यदि आप CultureInfo का उपयोग करते हैं, तो यह हमेशा काम करता है, और यह कोड को पठनीय रखता है। – increddibelly

-2

यहाँ संख्यात्मक स्वरूप का विस्तृत विवरण स्ट्रिंग्स
https://msdn.microsoft.com/en-us/library/dwhawy9k(v=vs.110).aspx

है मैं तुम्हें इस्तेमाल किया जा सकता था लगता है:
value.ToString ('एफ' + NumberOfDecimals)

value = 10,502 
value.ToString("F2") //10,50 
value = 10,5 
value.ToString("F2") //10,50 
+2

सवाल का मुद्दा यह है कि लेखक को डॉट की आवश्यकता है। दशमलव विभाजक के रूप में अल्पविराम नहीं। – Filip

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