2010-01-16 12 views
8
float f = 0.479f; 
Console.WriteLine(f.ToString("p1")); 

उत्पादन: 47.9%मैं प्रतिशत चिह्न के बिना प्रतिशत के रूप में मूल्य को कैसे प्रारूपित कर सकता हूं?

क्या मैं इस तरह उत्पादन के लिए प्रतिशत चिह्न को हटाने के लिए ToString() को भेजना चाहिए:

47,9

संपादित करें। मुझे यह उल्लेख करना चाहिए था कि मैं मास्क को किसी तृतीय पक्ष घटक में पास कर रहा हूं जो इसके साथ काम करता है। मैं दुर्भाग्यवश संख्याओं के साथ कोई एक्रोबेटिक्स नहीं कर सकता। यह मुखौटा होना है जो चाल करता है।

+0

स्वरूपित स्ट्रिंग के साथ आपका तीसरा घटक क्या करता है? क्या यह आपकी स्वरूपित पाठ की लंबाई को सीमित करता है? –

+0

@ रूबेन्स क्योंकि यह बस एक फॉर्मैटस्ट्रिंग प्रॉपर्टी प्रदान करता है जो इस मुखौटा को लेता है। सभी स्वरूपण तीसरे पक्ष के नियंत्रण द्वारा किया जाता है। – AngryHacker

+0

क्या आप एक नया नंबरइन्फोर्मेट बना सकते हैं? यदि ऐसा है, तो मेरी संपादित पोस्ट की जांच करें। – keyboardP

उत्तर

9

मैंने कहा जाना चाहिए था कि मैं घटक है कि यह इसके साथ बात है करता है एक 3 पार्टी के लिए मुखौटा गुजर हूँ। मैं दुर्भाग्य से संख्याओं के साथ किसी भी एक्रोबेटिक्स निष्पादित नहीं कर सकता। इसमें है जो चाल है जो मुखौटा है।

तो मुझे लगता है कि आप Float.ToString(String) साथ फंस रहे हैं, और आप केवल f.ToString("p1") में p1 संपादित नहीं कर सकते कि। अब यह एक मुश्किल है। यदि आप उल्लिखित परिवर्तनों से संबंधित कुछ भी तोड़ने से डरते नहीं हैं, तो आप निम्न कार्य कर सकते हैं:

"पी" संख्यात्मक प्रारूप, On MSDN दस्तावेज के रूप में, "%" चिह्न लिखने के लिए NumericFormatInfo.PercentSymbol का उपयोग करता है। NumericFormatInfo आपके वर्तमान CultureInfo का सदस्य है।

static class Program 
    { 
     /// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     [STAThread] 
     static void Main() 
     { 
      float f = 0.479f; 
      Console.WriteLine(f.ToString("p1")); //will write 47.9% 

      CultureInfo ci = CultureInfo.CurrentCulture.Clone() as CultureInfo; 
      ci.NumberFormat.PercentSymbol = "";    

      System.Threading.Thread.CurrentThread.CurrentCulture = ci; 
      Console.WriteLine(f.ToString("p1")); //will write 47.9 

      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new Form1()); 

     } 
    } 

अगर आप ToString कॉल को बदलने के लिए नहीं करना चाहते हैं जाने का रास्ता हो सकता है: क्या तुम कर सकते हो, अपने CurrentCulture क्लोन, और निम्नलिखित की तरह "" को PercentSymbol संशोधित है।

+0

+1, ओपी परिदृश्य में सबसे विश्वसनीय तरीका प्रतीत होता है; हो सकता है कि उसे मौजूदा संस्कृति को सीधे बदलने और उस तृतीय-पक्ष घटक कॉल के बाद अपना डिफ़ॉल्ट मान बहाल करने की आवश्यकता होगी। –

2

Console.WriteLine(f.ToString("p1").Replace('%',' ')); 

कोशिश कर सके या, यदि आप करते हैं कोई रिक्त स्थान नहीं चाहते हैं, का उपयोग Replace('%','\0')

संपादित करें: यदि आप केवल ToString() विधि का उपयोग कर सकते हैं, तो आप एक NumberFormatInfo वस्तु बना सकते हैं, सेट प्रतिशत प्रतीक खाली होने और विधि में इसे पास करने के लिए। (NumberFormatInfoSystem.Globalization नामस्थान में है) उदा।

NumberFormatInfo myNewFormat = new NumberFormatInfo(); 
    myNewFormat.PercentSymbol = ""; 

    float f = 0.479f; 

    Console.WriteLine(f.ToString("p1",myNewFormat)); 
+2

बोनस वैश्वीकरण बिंदुओं के लिए, '%' प्रतीक को हार्डवायर करने के बजाय 'NumberFormatInfo.CurrentInfo.PercentSymbol' का उपयोग करें। (मुझे कोई जानकारी नहीं है कि .NET संस्कृतियों में से कोई * वास्तव में * एक अलग प्रतीक का उपयोग करता है!) कुछ संस्कृतियां संख्या और '%' प्रतीक के बीच एक जगह भी रखती हैं (देखें 'NumberFormatInfo.PercentPositivePattern') ताकि वह भी हो ऐसा करने के बाद एक ट्रिम करना चाहते हैं या उसे एक अग्रणी या पिछली जगह के साथ छोड़ा जाएगा। – itowlson

+0

+1 - अच्छा बिंदु! – keyboardP

4
Console.WriteLine((f * 100).ToString("0.0")); 
2

कैसे बस निम्नलिखित के बारे में?

Console.WriteLine((f * 100).ToString("F1")); 

उदा। एफ = 0.4792 -> "47.9"

मानक संख्यात्मक प्रारूप की एक सूची और विवरण here on MSDN उपलब्ध हैं, यदि यह मदद करता है।

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