2009-06-26 14 views
47

मैं एक पाठ बॉक्स मुझे एक संतुलन की जरूरत है कि इस प्रारूप में होना करने के लिए दिखा एक स्ट्रिंग मान फ़ीड ("सी"), लेकिन इससे मुद्रा चिह्न इसके सामने रखा जाएगा।मुद्रा लेकिन मुद्रा पर हस्ताक्षर के बिना (सी #) की तरह एक डबल मूल्य फॉर्मेट करें

कोई विचार है कि मैं उपरोक्त स्वरूपण प्राप्त करने के लिए टेक्स्टबॉक्स को खिलाने से पहले स्ट्रिंग में हेरफेर कैसे करूं?

मैं इस कोशिश की, सफलता के बिना:

String.Format("###,###,###,##0.00", currentBalance); 

कई धन्यवाद,

उत्तर

50
string forDisplay = currentBalance.ToString("N2"); 
+10

यह स्वीकार्य नहीं है क्योंकि यदि संस्कृति में मुद्रा के लिए नकारात्मक प्रतीक() और दशमलव के लिए नकारात्मक प्रतीक है - मुद्रा प्रतिनिधित्व गलत होगा। –

+2

@Bob: यह स्वीकार किया जाता है उत्तर दें, यह परिभाषा के अनुसार, ओपी को स्वीकार्य है। चूंकि "मुद्रा की तरह प्रारूप लेकिन मुद्रा चिह्न के बिना प्रारूप" के लिए कोई अंतर्निहित प्रारूप विनिर्देश नहीं है, उस स्थिति में कुछ प्रकार की मैन्युअल प्रोसेसिंग की आवश्यकता होगी: या तो * (1) * जॉन के उत्तर के अनुसार कस्टम 'NumberFormatInfo' का उपयोग करें, * (2) * एक कस्टम प्रारूप स्ट्रिंग, या * (3) * कॉल' ToString ("c") 'और फिर प्रतीक को हटाने के लिए पोस्ट-प्रोसेस का उपयोग करें। – LukeH

+0

@ ल्यूकएच: हालांकि यह स्वीकार्य उत्तर है जवाब है कि जॉन स्कीट इस अर्थ में अधिक सही है कि यह NumberFormatInfo द्वारा प्रदान की गई मुद्रा स्वरूपण का उपयोग करता है। –

58

मुद्रा स्वरूपण आप देता है करने के लिए "" वास्तव में आप क्या चाहते हैं, के साथ एक NumberFormatInfo क्लोन और CurrencySymbol गुण सेट। आपको यह जांचना चाहिए कि यह नकारात्मक संख्याओं को उस तरीके से संभालता है जिस तरह से आप चाहते हैं।

उदाहरण के लिए:

using System; 
using System.Globalization; 

class Test 
{ 
    static void Main() 
    { 
     NumberFormatInfo nfi = CultureInfo.CurrentCulture.NumberFormat; 
     nfi = (NumberFormatInfo) nfi.Clone(); 

     Console.WriteLine(string.Format(nfi, "{0:c}", 123.45m)); 
     nfi.CurrencySymbol = ""; 
     Console.WriteLine(string.Format(nfi, "{0:c}", 123.45m)); 
    } 
} 

अन्य विकल्प निश्चित रूप से एक कस्टम सांख्यिक प्रारूप स्ट्रिंग का उपयोग करना है - यह निर्भर करता है कि क्या तुम सच में वास्तव में दर्पण एक मुद्रा, इस तरह दिखाई देंगे सिर्फ प्रतीक के बिना, या नियंत्रण चाहते हैं अंकों की सटीक स्थिति।

+0

यह पूरी तरह से काम करता है। यदि आप वर्तमान संस्कृति के रूप में मुद्रा को स्वरूपित करना चाहते हैं लेकिन प्रतीक के बिना, यह सबसे अच्छा समाधान प्रतीत होता है। –

+1

आप यह सुनिश्चित करने के लिए परिणाम में एक ट्रिम() जोड़ने पर विचार कर सकते हैं कि आपके पास कोई अग्रणी (या पीछे) रिक्त स्थान नहीं है। –

+1

@ बेंजामिन वेगमैन: मुझे लगता है कि यदि संस्कृति-संवेदनशील मुद्रा प्रारूप में व्हाइटस्पेस शामिल है, तो यह कुछ अच्छे कारणों से है। –

7

आप की कोशिश की है:

currentBalance.ToString("N2"); 
2
CultureInfo cultureInfo = new CultureInfo("en-US"); 
cultureInfo.NumberFormat.CurrencySymbol = "Rs."; 

Thread.CurrentThread.CurrentCulture = cultureInfo; 
decimal devimalValue = 3.45M; 
this.Text = devimalValue.ToString("C2"); //Rs.3.45 
5

स्ट्रिंग परिणाम = String.Format (":

currentBalance.ToString("#,##0.00"); 

यह की लंबे समय से हाथ बराबर है {0: एन 2} ", मूल्य); । // ### ### ## की तरह ##

3

परिणाम के लिए आप इस तरह the group separator और the section separator साथ ऐसा कर सकते,:

currentBalance.ToString("#,0.00;(#,0.00)"); 

इस संस्कृति के लिए खाते में नहीं है से उत्तर की तरह प्रसरण @ जोन्स स्केट होगा, लेकिन यह दशमलव स्थान, गोल करने, हजारों अलगाव, और ऋणात्मक संख्या को संभालने की नकल करता है जो एन-यूएस संस्कृति मुद्रा प्रारूप एक कस्टम प्रारूप स्ट्रिंग का उपयोग करके उत्पन्न करता है।

.NET Fiddle Demo

0

यह overkill हो सकता है, लेकिन यह दौर, प्रारूपों ...

@helper TwoDecimalPlaces(decimal? val) 
{ 
    decimal x = 0; 
    decimal y = 0; 
    string clas = "text-danger"; 
    if (val.HasValue) 
    { 
     x = (decimal)val; 
     if (val > 0) 
     { 
      clas = ""; 
     } 
    } 
    y = System.Math.Round(x, 2); 
    IFormatProvider formatProvider = new System.Globalization.CultureInfo(string.Empty); 
    <span class="@clas">@string.Format("{0:N2}", y)</span> 
} 
0

यह सरल उपाय अमेरिकी मुद्रा के साथ मेरे लिए काम करता है।

तो अंतरराष्ट्रीय मुद्रा समर्थन इस प्रयोग की जरूरत नहीं और की जगह मुद्रा प्रतीक (रों) के साथ $ हटाए जाएंगे:

// for USD 
string result = currentBalance.ToString("C").Replace("$", "") 

या

// for EUR 
string result = currentBalance.ToString("C").Replace("€", "")