सवाल मैं निम्नलिखित 0 को हटाने के लिए सी # दशमलव कैसे प्रारूपित करूं?


मैं एक स्ट्रिंग को दशमलव के रूप में प्रारूपित करना चाहता हूं, लेकिन दशमलव में दशमलव के बाद कुछ निम्न शून्य शामिल हैं। मैं इसे कैसे प्रारूपित करूं कि उन अर्थहीन 0 गायब हो गए हैं?

string.Format("{0}", 1100M);
string.Format("{0}", 1100.1M);
string.Format("{0}", 1100.100M);
string.Format("{0}", 1100.1000M);

प्रदर्शित करता है:

1100
1100.1
1100.100
1100.1000

लेकिन मैं यह होना चाहता हूं:

1100
1100.1
1100.1
1100.1

संदर्भ के लिए, यहां अन्य प्रश्न हैं जो अनिवार्य रूप से इसके डुप्लिकेट हैं, जिन्हें मैंने यहां दिए गए उत्तरों के लिए धन्यवाद दिया है:


44
2018-01-24 20:18


मूल


क्या 1002.231 बस एक उदाहरण है? यही है, क्या आप 1.12000 1.12 या 1.120 होना चाहते हैं? - n8wrl
ध्यान दें कि यदि आप चाहते हैं दशमलव मान, आपको एक का उपयोग करना चाहिए, उदा। 1100.1000m। "दशमलव अक्षर" के लिए "एम" पर ध्यान दें। - Jon Skeet
@ जोन: धन्यवाद मैंने देखा कि यह भी ठीक करने के लिए चला गया, और जब मैं लौटा तो आपकी टिप्पणी मेरे लिए इंतज़ार कर रही थी .. तो तेज़ ...;) - Scott Stafford
@ n8wrl: बस एक उदाहरण, हां, मैंने और उदाहरणों के साथ अद्यतन किया। - Scott Stafford


जवाब:


आप उपयोग कर सकते हैं ToString() उसके साथ सामान्य ("जी") प्रारूप विशिष्ट वांछित परिणाम प्राप्त करने के लिए। इस प्रारूप स्ट्रिंग का उपयोग करते समय एक सटीक निर्दिष्ट के साथ ट्रेलिंग शून्य को छोटा कर दिया जाता है। किसी भी परिस्थिति में गोल करने से रोकने के लिए, आपको परिशुद्धता को अधिकतम दशमलव (2 9) के लिए अधिकतम सेट करने की आवश्यकता होगी।

जो भी आप चाहते हैं उसे बनाने के लिए कोड की रेखा है number.ToString("G29"), कहा पे number आपका मूल दशमलव है

ध्यान रखें कि 0.0001 से छोटे नंबरों को वैज्ञानिक नोटेशन में परिवर्तित कर दिया जाएगा। इस फ़ॉर्मेटर कार्यों को कैसे ऊपर दिए गए संदर्भ लिंक पर पाया जा सकता है इसके बारे में अधिक जानकारी।


78
2018-01-24 21:20



मुझे लगता है कि यह सवाल का सबसे अच्छा समाधान है। - Wegged
Concur - स्विच जवाब। धन्यवाद, @ हेरोहोटर। - Scott Stafford
चेतावनी: 0.000001 जैसे मूल्यों के लिए देखें। जी 2 9 प्रारूप उन्हें सबसे कम संभव तरीके से पेश करेगा ताकि यह घातीय नोटेशन पर स्विच कर सके। string.Format ("{0: G29}", दशमलव। पर्स ("0.00000001", System.Globalization.CultureInfo.GetCultureInfo ("en-U S")) परिणामस्वरूप "1E-08" देगा। क्रेडिट यहां कोनराड जाता है: stackoverflow.com/questions/4525854/remove-trailing-zeros/... - Doug S
@ डौग्स: ऐसा लगता है कि यह 0.0001 से कम संख्या के लिए वैज्ञानिक नोटेशन पर स्विच करता है (उदाहरण के लिए, 0.0001 वही रहता है, लेकिन 0.00009 9ई-05 होगा) ऐसा लगता है कि ज़ीरो को कम करने के इच्छुक अधिकांश मामलों में समस्या होने की संभावना नहीं है, लेकिन एक फिर भी जानना अच्छी बात है। - Herohtar
जी 2 9 आवश्यक नहीं है। दशमलव के लिए "G0" == "G29" - statler


string s = d.ToString("0.#############################");

20
2018-04-06 11:52





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

मेरे पास कुछ कोड है यह जवाब जो एक सामान्यीकृत मूल्य वापस कर देगा - आप इसका उपयोग कर सकते हैं, और फिर परिणाम स्वरूपित कर सकते हैं। उदाहरण के लिए:

using System;
using System.Numerics;

class Test
{
    static void Display(decimal d)
    {
        d = d.Normalize(); // Using extension method from other post
        Console.WriteLine(d);
    }

    static void Main(string[] args)
    {
        Display(123.4567890000m); // Prints 123.456789
        Display(123.100m);        // Prints 123.1
        Display(123.000m);        // Prints 123
        Display(123.4567891234m); // Prints 123.4567891234
    }
}

मैं संदिग्ध कि अधिकांश प्रारूप स्ट्रिंग दृष्टिकोण विफल हो जाएंगे। मुझे लगता है कि "0." की प्रारूप स्ट्रिंग और फिर 28 # अक्षर काम करेंगे, लेकिन यह बहुत बदसूरत होगा ...


4
2018-01-24 20:22



ऐसा लगता है कि आपका समाधान केवल .NET 4.0 के लिए है। - Gabe
@Gabe: जब तक आप किसी तृतीय पक्ष BigInteger कार्यान्वयन का उपयोग नहीं करते हैं, हां। यह भी बहुत अक्षम है। दूसरी ओर, यह काम करने का लाभ है :) - Jon Skeet


आप निर्दिष्ट कर सकते हैं प्रारूप स्ट्रिंग इस तरह:

String.Format("{0:0.000}", x);

3
2018-01-24 20:21



लेकिन मुझे नहीं पता कि अंत में तीन दशमलव हो गए हैं, मेरा मतलब था कि केवल एक उदाहरण के रूप में। मैं सवाल स्पष्ट कर दूंगा। - Scott Stafford


कैसा रहेगा:

string FormatDecimal(decimal d)
{
    const char point = System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator[0];
    string s = d.ToString();
    // if there's no decimal point, there's nothing to trim
    if (!s.Contains(point) == -1)
        return s;
    // trim any trailing 0s, followed by the decimal point if necessary
    return s.TrimEnd('0').TrimEnd(point);
}

3
2018-01-24 20:43



'।' के बजाय System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator का उपयोग करें। - Yoshi


जो कुछ भी उपयोग करने का सुझाव देता है उसके विपरीत G प्रारूप विनिर्देशक मैं अतिरिक्त पिछला शून्य हटाने के दौरान हजारों विभाजक और दशमलव बिंदु दोनों को संरक्षित करने के लिए निम्न का सुझाव दूंगा:

{0:#,#.##}

ज्यादातर मामलों में जी के मुकाबले इस प्रारूप का परिणाम जी से काफी बेहतर है:

String.Format("{0:#,#.##}",25/2.4);
10.42

String.Format("{0:#,#.##}",1000000);
1,000,000

String.Format("{0:#,#.##}",1000000.3600000);
1,000,000.36

और यह G विनिर्देशक वास्तव में सभी संभावित संयोजनों को संभाल नहीं सकता है:

String.Format("{0:G29}",25/2.4);
10.416666666666668

String.Format("{0:G2}",25/2.4);
10

String.Format("{0:G29}",1000000.3600000);
1000000.36

String.Format("{0:G2}",1000000.3600000);
1E+06

3
2018-04-30 07:16





काफी पहले से ही कुछ जवाब। मैं अक्सर इस धोखा शीट का उल्लेख करता हूं: http://blog.stevex.net/string-formatting-in-csharp/


2
2018-01-24 20:25





कुछ हद तक हैकिश, लेकिन यह काम करना चाहिए:

decimal a = 100.00M;
string strNumber = string.Format("{0}", a);
Console.WriteLine(strNumber.Contains('.') ? strNumber.TrimEnd('0').TrimEnd('.') : strNumber);

2
2018-01-24 20:29



एसीके! क्या हो अगर a = 100.000? या a = 0? - Gabe
क्या हो अगर a = 100M? - kerkeslager
@Gabe फिक्सिंग की प्रक्रिया में था - Davy8
@kerk अब तय किया जाना चाहिए। अगर आपको अद्यतन उत्तर में कोई काउंटररेक्समल्स मिल जाए तो मुझे बताएं। - Davy8
एक डाउनवोट हटाने को ध्यान में रखेगा जब तक कि अद्यतन उत्तर अभी भी संतोषजनक नहीं है? - Davy8


मेरा मानना ​​है कि आप करना चाहते हैं:

var s = String.Format("{0:#####.###}");

1
2018-01-24 20:23



123.45678900 मीटर के लिए विफल - Jon Skeet


String.Format("{0:0.##}", 123.0); // "123"

1
2018-01-24 20:21



123.45678 9 मीटर के लिए विफल - Jon Skeet
होना चाहिए ... स्ट्रिंग। फॉर्मेट ("{0: 0.0 ##}", 123.456789 मीटर) धन्यवाद - John K.


double a = 1100.00
double  b =1100.1
double  c = 1100.100
double  d =1100.1000

Remove last zero after point


string stra = a.toString("0.00").TrimEnd('0').TrimEnd('.');
string strb = b.toString("0.00").TrimEnd('0').TrimEnd('.');
string strc = c.toString("0.00").TrimEnd('0').TrimEnd('.');
string strd = d.toString("0.00").TrimEnd('0').TrimEnd('.');

Output

1100
1100.1
1100.1
1100.1

-2
2017-12-11 14:16