2012-07-27 12 views
8

मैं इसे खोज रहा हूं लेकिन मुझे जवाब नहीं मिल रहा है। मैं इसी उत्पादन के साथ निम्न दशमलव है कि मैं String.Format से चाहते हैंप्रारूप दशमलव सी # - अंतिम शून्य रखें

100.00 -> 100
100.50 -> 100.50
100.51 -> 100,51

मेरे समस्या यह है कि मैं एक खोजने के लिए नहीं कर पा रहे प्रारूप जो 100.50 के अंत में 0 रखेगा और 100 से 2 शून्य हटा देगा।

किसी भी मदद की बहुत सराहना की जाती है।

EDIT कुछ और स्पष्टता के लिए। मेरे पास दशमलव प्रकार के चर हैं, वे केवल 2 दशमलव स्थान होने जा रहे हैं। मूल रूप से मैं 2 दशमलव स्थानों प्रदर्शित करना चाहते हैं यदि वे मौजूद है या कोई भी, मैं 100.50 के मामले में एक दशमलव स्थान प्रदर्शित करने के लिए बनने 100.5

+0

आप चाहते हैं "100.50" बनने के लिए "1.50"? –

+2

उदाहरण कृपया! –

उत्तर

14

आप इस का उपयोग कर सकते हैं नहीं करना चाहती: जहाँ तक

string s = number.ToString("0.00"); 
if (s.EndsWith("00")) 
{ 
    s = number.ToString("0"); 
} 
+2

tobias86 के उत्तर के साथ, यह सभी मशीनों पर काम नहीं करता है, क्योंकि कुछ दशमलव विभाजक के लिए अल्पविराम का उपयोग करते हैं। –

+0

+1, अच्छा एक ... – Heinzi

+0

धन्यवाद मार्क। खेद है कि संस्कृति के बारे में और अधिक स्पष्ट होना चाहिए था, मैं इस मामले में इसे अनदेखा कर सकता हूं। यह पूरी तरह से काम करता है। – Peuge

16

मुझे पता है, ऐसा कोई प्रारूप नहीं है। आप .: इस मैन्युअल रूप से उदाहरण के लागू करने के लिए,

String formatString = Math.Round(myNumber) == myNumber ? 
         "0" :  // no decimal places 
         "0.00"; // two decimal places 
+2

'100।001' '0.00" प्रारूप का उपयोग करेगा। –

+1

@ मार्कस जार्डरोट: दरअसल। केवल ओपी जवाब दे सकता है कि यह वांछित व्यवहार है या नहीं। वह अधिक अंक के साथ एक उदाहरण शामिल नहीं है। – Heinzi

+0

अब तक का सबसे अच्छा समाधान है। इस –

2

ठीक है, यह मेरी आँखों दर्द होता होगा, लेकिन आप देना चाहिए कि आप क्या चाहते:

string output = string.Format("{0:N2}", amount).Replace(".00", ""); 

अद्यतन: मैं Heinzi का जवाब अधिक पसंद है।

+1

के लिए धन्यवाद यह मेरी मशीन पर काम नहीं करता है, जहां एक अल्पविराम दशमलव के लिए डिफ़ॉल्ट है। :) –

+0

@ एंडर्स होल्मस्ट्रॉम सच ... मैंने स्थानीयकरण के बारे में नहीं सोचा था। – tobias86

+5

कोई भी कभी नहीं करता ... (मैं एक अनुवाद कंपनी में काम करता हूं। :)) –

5

टेस्ट करता है, तो आपका नंबर एक पूर्णांक है, और उपयोग के अनुसार प्रारूप:

string.Format((number % 1) == 0 ? "{0}": "{0:0.00}", number) 
1

यह दृष्टिकोण वांछित परिणाम प्राप्त होगा, जबकि निर्दिष्ट संस्कृति को लागू करने:

decimal a = 100.05m; 
decimal b = 100.50m; 
decimal c = 100.00m; 

CultureInfo ci = CultureInfo.GetCultureInfo("de-DE"); 

string sa = String.Format(new CustomFormatter(ci), "{0}", a); // Will output 100,05 
string sb = String.Format(new CustomFormatter(ci), "{0}", b); // Will output 100,50 
string sc = String.Format(new CustomFormatter(ci), "{0}", c); // Will output 100 

आप के साथ संस्कृति की जगह ले सकता CultureInfo.CurrentCulture या आपकी जरूरतों को पूरा करने के लिए कोई अन्य संस्कृति।

CustomFormatter वर्ग है:

public class CustomFormatter : IFormatProvider, ICustomFormatter 
{ 
    public CultureInfo Culture { get; private set; } 

    public CustomFormatter() 
     : this(CultureInfo.CurrentCulture) 
    { } 

    public CustomFormatter(CultureInfo culture)    
    { 
     this.Culture = culture; 
    } 

    public object GetFormat(Type formatType) 
    { 
     if (formatType == typeof(ICustomFormatter)) 
      return this; 

     return null; 
    } 

    public string Format(string format, object arg, IFormatProvider formatProvider) 
    { 
     if (formatProvider.GetType() == this.GetType()) 
     { 
      return string.Format(this.Culture, "{0:0.00}", arg).Replace(this.Culture.NumberFormat.NumberDecimalSeparator + "00", ""); 
     } 
     else 
     { 
      if (arg is IFormattable) 
       return ((IFormattable)arg).ToString(format, this.Culture); 
      else if (arg != null) 
       return arg.ToString(); 
      else 
       return String.Empty; 
     } 
    } 
} 
संबंधित मुद्दे