2009-07-01 15 views
22

स्वरूपण यह एक आसान समस्या नहीं होनी चाहिए लेकिन ...मुद्रा

मैं सी # में प्रदर्शन (स्ट्रिंग) के लिए एक मुद्रा प्रारूप में तैयार करना

प्रश्न मुद्रा में इस तरह के प्रतीक के रूप में अपने स्वयं के नियम होगा उपयोग करें और यदि वह प्रतीक मूल्य (जैसे $ 10) या उसके बाद (उदाहरण के लिए 10 ₫ जो वियतनामी दांग है) से पहले आना चाहिए।

लेकिन संख्याओं को स्वरूपित कैसे किया जाता है, स्थानीय उपयोगकर्ताओं पर निर्भर करता है, मुद्रा नहीं।

उदा।

1.234,56 ₫ should be displayed to a user in Vietnam but 
1,234.56 ₫ should be displayed to a user in the US 

(कोड के बीच अंतर को देखने के लिए इतना आसान है, और इस प्रारूप में उपलब्ध।)

तो कोड की तरह

Double vietnamTotal = 1234.56; 
return vietnamTotal.ToString("c"); 

काम नहीं करेंगे के रूप में यह उन का उपयोग करेगा (या अधिक सटीक रूप से CultureInfo.CurrentCulture) प्रारूप और मुद्रा के लिए लोकेल ताकि आपको $ 1,123.56 जैसी चीजें मिलें - का सही उपयोग, और। लेकिन गलत प्रतीक। सही प्रतीक, का गलत उपयोग करते हैं, और -

Double vietnamTotal = 1234.56; 
CultureInfo ci = new CultureInfo(1066); // Vietnam 
return vietnameTotal.ToString("c",ci)); 

1.234,56 ₫ देंगे। वर्तमान उपयोगकर्ता के लिए।

यह पोस्ट करने के लिए सही काम पर gives more detail है, लेकिन यह नहीं करना है।

क्या स्पष्ट विधि ढांचे में छिपा हुआ मुझे याद आ रही?

उत्तर

26
  • उपयोगकर्ता की मुद्रा से NumberFormatInfo ले लो, और सवाल
  • मुद्रा की CurrencySymbol को क्लोन प्रारूप में क्लोन
  • सेट CurrencySymbol यदि आप चाहते हैं मुद्रा स्थिति (और के कुछ अन्य पहलुओं प्रारूप), कॉपी करने के लिए उसी तरह से CurrencyPositivePattern और CurrencyNegativePattern निर्धारित किया है।
  • स्वरूप के लिए परिणाम का उपयोग करें।

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

using System; 
using System.Globalization; 

class Test 
{  
    static void Main() 
    { 
     decimal total = 1234.56m; 
     CultureInfo vietnam = new CultureInfo(1066); 
     CultureInfo usa = new CultureInfo("en-US"); 

     NumberFormatInfo nfi = usa.NumberFormat; 
     nfi = (NumberFormatInfo) nfi.Clone(); 
     NumberFormatInfo vnfi = vietnam.NumberFormat; 
     nfi.CurrencySymbol = vnfi.CurrencySymbol; 
     nfi.CurrencyNegativePattern = vnfi.CurrencyNegativePattern; 
     nfi.CurrencyPositivePattern = vnfi.CurrencyPositivePattern; 

     Console.WriteLine(total.ToString("c", nfi)); 
    } 
} 

वैसे मेरे कंसोल सही प्रतीक को प्रदर्शित करने का प्रबंधन नहीं है, लेकिन मुझे यकीन है कि सिर्फ है फॉन्ट मुद्दों :) की वजह से कर रहा हूँ

+0

लगभग जॉन, धन्यवाद - (जैसे वियतनाम या स्पेन मूल्य के बाद मुद्रा प्रतीक जगह) लेकिन यह मुद्रा प्रतीक सही की स्थिति नहीं मिलता है आपको लगता है कि बहस कर सकते स्थिति उपयोगकर्ताओं की संस्कृति पर निर्भर करती है (जैसे दशमलव पृथक आर) लेकिन एक्सेल और शेयरपॉइंट जैसे उत्पाद मुद्रा की संस्कृति के आधार पर स्थिति करते हैं। – Ryan

+0

ठीक है, तो उस पर फिक्सिंग ... –

+0

हो गया - आप अन्य मुद्रा-संबंधित गुणों को देखना चाहेंगे, हालांकि ऐसा लगता है कि समूह आकार या प्रतीकों को बदलना नहीं चाहते हैं। –

1

क्षमा करें, मैं हो सकता है यहां थोड़ी धीमी हो रही है, लेकिन मुझे अभी भी आपका मुद्दा नहीं दिख रहा है। ऐसा लगता है कि मूल प्रश्न है "मेरे पास एक डोंग वैल्यू है, जो वियतनाम में, मैं" ₫ "प्रतीक के साथ वियतनामी मुद्रा प्रारूप के अनुसार प्रदर्शित करना चाहता हूं, और अमेरिका में, मैं यूएस मुद्रा प्रारूप के अनुसार प्रदर्शित करना चाहता हूं , लेकिन अभी भी एक "₫" के साथ। "

मुझे लगता है मैं दो विरोधाभासी बयान से उलझन में हो रही ... "सवाल मुद्रा अपने नियम होगा" और "कैसे संख्या स्वरूपित हैं उन स्थानीय [वैसा], नहीं पर निर्भर करता है मुद्रा।"

यदि आप केवल इतना मुद्रा प्रतीक था बदलने के लिए, और वर्तमान संस्कृति के अनुसार स्वरूपण को छोड़ना चाहते हैं एनएफआई क्लोनिंग नहीं होता और प्रतीक की स्थापना के लिए पर्याप्त हो सकता है?

 NumberFormatInfo nfi; 

    // pretend we're in Vietnam 
    Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("vi-VN"); 

    nfi = CultureInfo.CurrentCulture.NumberFormat.Clone() as NumberFormatInfo; 
    nfi.CurrencySymbol = "₫"; 

    String s1 = (1234.5678).ToString("c", nfi); 

    // pretend we're in America 
    Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US"); 

    nfi = CultureInfo.CurrentCulture.NumberFormat.Clone() as NumberFormatInfo; 
    nfi.CurrencySymbol = "₫"; 

    String s2 = (1234.5678).ToString("c", nfi); 
+0

क्षमा करें ... ऐसा लगता है कि यह रैंपल एक टिप्पणी के लिए बहुत बड़ा था। –

+0

जो जॉन ने अपने जवाब में बिल्कुल प्रस्तावित किया है। – Ryan

+0

और बिंदु पर - यदि आप फ़्रैंच में किसी चीज़ के लिए कीमत देखने के लिए वेबसाइट पर गए हैं तो आप € 1,234.56 (यूरो प्रतीक, यूएस/यूके स्वरूपण) या € 1.234,56 (यूरो प्रतीक और फ्रेंच स्वरूपण) देखना चाहते हैं। – Ryan

0

के साथ काम करने के लिए । एक पाठ बॉक्स, निम्न प्रयास करें:

textBox2.Text = "Rp" + (textBox1.Text = string.Format(System.Globalization.CultureInfo.GetCultureInfo("id-ID"), "{0:#,##0.00}", double.Parse(textBox1.Text))); 
संबंधित मुद्दे