दिलचस्प पोस्ट
एंड्रॉइड: मैं ViewPager WRAP_CONTENT नहीं कर पा रहा हूं Python के http.server (या SimpleHTTPServer) का एक तेज़ विकल्प क्या है? File.Create () का उपयोग करने के बाद फ़ाइल को दूसरी प्रक्रिया द्वारा उपयोग किया जा रहा है PHP में कनेक्शन पूलिंग PHP in_array () / array_search () विषम व्यवहार जावास्क्रिप्ट प्रारूप दिनांक / समय जावा में क्रमबद्ध संग्रह सी # में किसी फ़ंक्शन से मैं कई मान कैसे वापस कर सकता हूं? "है" ऑपरेटर अनपेक्षित रूप से पूर्णांक के साथ व्यवहार करता है मैं कैसे सी # में (निर्देशिका) पथ की तुलना कर सकते हैं? विभिन्न SELECT क्वेरीज़ के आउटपुट को वापस करने के लिए पीएल / पीजीएसयूएल फ़ंक्शन रिफैक्टर करें ES6 वर्गों में स्थिर स्थिरांक घोषित करना? JSONObject का उपयोग करके जावा में सही JsonArray कैसे बनाया जाए डीजेंगो के auth_user.username varchar (75) हो सकता है? यह कैसे किया जा सकता है? स्वयं हस्ताक्षरित वेबसाइट देखने के लिए UIWebView (कोई निजी एपीआई, NSURL कनेक्शन नहीं) – क्या यह संभव है?

पीछे वाले शून्य निकालें

मेरे पास कुछ फ़ील्ड हैं जो संग्रह के द्वारा वापस आये हैं

2.4200 2.0044 2.0000 

मैं परिणाम पसंद करना चाहता हूँ

 2.42 2.0044 2 

मैंने String.Format साथ कोशिश की, लेकिन यह 2.0000 रिटर्न करता है और इसे N0 राउंड को दूसरे मानों के रूप में भी सेट करता है।

वेब के समाधान से एकत्रित समाधान "पीछे वाले शून्य निकालें"

क्या यह उतना आसान नहीं है जब इनपुट एक स्ट्रिंग है? आप इनमें से एक का उपयोग कर सकते हैं:

 string.Format("{0:G29}", decimal.Parse("2.0044")) decimal.Parse("2.0044").ToString("G29") 2.0m.ToString("G29") 

यह सभी इनपुट के लिए काम करना चाहिए

अद्यतन मानक संख्यात्मक प्रारूप देखें I स्पष्ट रूप से सटीक विनिर्देशक को 29 के रूप में सेट करना पड़ा क्योंकि डॉक्स स्पष्ट रूप से यह बताता है:

हालांकि, अगर संख्या दशमलव है और सटीक विनिर्देशक को छोड़ा जाता है, निश्चित-बिंदु संकेतन हमेशा उपयोग किया जाता है और अनुक्रमित शून्य को संरक्षित किया जाता है

कोनोद ने टिप्पणी में बताया :

जैसे मूल्यों के लिए देखें 0.000001 G29 प्रारूप उन्हें कम से कम संभव तरीके से पेश करेगा ताकि वह घातीय नोटेशन पर स्विच कर सके। string.Format("{0:G29}", decimal.Parse("0.00000001",System.Globalization.CultureInfo.GetCultureInfo("en-US"))) परिणामस्वरूप "1 ई -08" देगा।

मैं एक ही समस्या में चला गया लेकिन एक ऐसे मामले में जहां मुझे स्ट्रिंग के लिए आउटपुट पर नियंत्रण नहीं है, जिसे पुस्तकालय द्वारा लिया गया था दशमलव प्रकार के कार्यान्वयन में विवरणों को देखने के बाद (देखें http://msdn.microsoft.com/en-us/library/system.decimal.getbits.aspx ), मैं एक साफ चाल के साथ आया (यहाँ एक विस्तार के रूप में तरीका):

 public static decimal Normalize(this decimal value) { return value/1.000000000000000000000000000000000m; } 

दशमलव का एक्सपोनेंट हिस्सा घटकर कम हो गया है जो कि जरूरी है। आउटपुट दशमलव पर टूस्ट्रिंग () को कॉल करने से बिना कोई अनुक्रमित संख्या लिखनी होगी। उदाहरण

 1.200m.Normalize().ToString(); 

मेरी राय में कस्टम न्यूमेरिक प्रारूप स्ट्रिंग्स का उपयोग करने के लिए सुरक्षित है I

 decimal d = 0.00000000000010000000000m; string custom = d.ToString("0.#########################"); // gives: 0,0000000000001 string general = d.ToString("G29"); // gives: 1E-13 

मैं "G29" वैज्ञानिक संकेतन से बचने के लिए इस कोड का उपयोग करता हूं:

 public static string DecimalToString(decimal dec) { string strdec = dec.ToString(CultureInfo.InvariantCulture); return strdec.Contains(".") ? strdec.TrimEnd('0').TrimEnd('.') : strdec; } 

मुझे http://dobrzanski.net/2009/05/14/c-decimaltostring-and-how-to-get-rid-of-trailing-zeros/ से एक सुरुचिपूर्ण समाधान मिला

मूल रूप से

दशमलव वी = 2.4200 एम;

v.ToString ( "# ######।"); // 2.42 वापस आ जाएगी # की संख्या यह है कि आप कितने दशमलव अंक का समर्थन करते हैं।

हैश ( # ) प्रतीक का प्रयोग करें जब आवश्यक हो तो पिछड़े 0 के प्रदर्शन को प्रदर्शित करें। नीचे दिए गए परीक्षण देखें

 decimal num1 = 13.1534545765; decimal num2 = 49.100145; decimal num3 = 30.000235; num1.ToString("0.##"); //13.15% num2.ToString("0.##"); //49.1% num3.ToString("0.##"); //30% 

यह वही करता है जो आप चाहते हैं:

यदि आपका प्रारंभिक मान decimal :

 decimal source = 2.4200m; string output = ((double)source).ToString(); 

यदि आपका प्रारंभिक मान string :

 string source = "2.4200"; string output = double.Parse(source).ToString(); 

और न्यूनतम प्रदर्शन लागत चाहिए।

बहुत सरल उत्तर का उपयोग ट्रिमएंड () है यहाँ परिणाम है,

 double value = 1.00; string output = value.ToString().TrimEnd('0'); 

आउटपुट 1 है यदि मेरा मान 1.01 है तो मेरा आउटपुट 1.01 होगा

आपकी संख्या क्या दर्शाती है और आप मूल्यों को कैसे प्रबंधित करना चाहते हैं, यह निर्भर करता है: क्या यह एक मुद्रा है, क्या आपको गोलाई या छिद्रण की आवश्यकता है, क्या आपको केवल प्रदर्शन के लिए यह गोलाकार की ज़रूरत है?

यदि प्रदर्शन के लिए संख्याओं को स्वरूपित करने पर विचार किया जाता है तो x.ToString ("")

http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx और

http://msdn.microsoft.com/en-us/library/0c899ak8.aspx

यदि यह सिर्फ गोलाई है, तो मठ का उपयोग करें। राउंड अधिभार जिसमें मिडपॉइंटराउंडिंग ओवरलोड की आवश्यकता होती है

http://msdn.microsoft.com/en-us/library/ms131274.aspx )

यदि आप किसी डेटाबेस से अपना मान रूपांतरण के बजाय कास्टिंग पर विचार करें: डबल मान = (दशमलव) myRecord ["columnName"];

बहुत कम स्तर का दृष्टिकोण है, लेकिन मुझे लगता है कि यह केवल तीव्र पूर्णांक गणनाओं (और धीमी स्ट्रिंग पार्सिंग और संस्कृति संवेदनशील तरीकों) का उपयोग करके सबसे शानदार तरीका होगा:

 public static decimal Normalize(this decimal d) { int[] bits = decimal.GetBits(d); int sign = bits[3] & (1 << 31); int exp = (bits[3] >> 16) & 0x1f; uint a = (uint)bits[2]; // Top bits uint b = (uint)bits[1]; // Middle bits uint c = (uint)bits[0]; // Bottom bits while (exp > 0 && ((a % 5) * 6 + (b % 5) * 6 + c) % 10 == 0) { uint r; a = DivideBy10((uint)0, a, out r); b = DivideBy10(r, b, out r); c = DivideBy10(r, c, out r); exp--; } bits[0] = (int)c; bits[1] = (int)b; bits[2] = (int)a; bits[3] = (exp << 16) | sign; return new decimal(bits); } private static uint DivideBy10(uint highBits, uint lowBits, out uint remainder) { ulong total = highBits; total <<= 32; total = total | (ulong)lowBits; remainder = (uint)(total % 10L); return (uint)(total / 10L); } 

ट्रोन्केट अनुगामी Zeros बहुत आसान है, एक डुप्लेक्स डाली के साथ हल:

  decimal mydecimal = decimal.Parse("1,45000000"); //(I) decimal truncate = (decimal)(double)mydecimal; //(II) 

(I) -> किसी स्ट्रिंग स्रोत से दशमलव मान पार्स करें

(II) -> पहले: इस को दोगुना करने के लिए पीछे के शून्य को हटा दें। दूसरा: दशमलव के लिए अन्य डाली क्योंकि दशमलव से द्विगुणित और उपस्वरा में अप्रत्यक्ष रूप से रूपांतरण न हो)

इस कोड को आज़माएं:

 string value = "100"; value = value.Contains(".") ? value.TrimStart('0').TrimEnd('0').TrimEnd('.') : value.TrimStart('0'); 

आप बस के रूप में सेट कर सकते हैं:

 decimal decNumber = 23.45600000m; Console.WriteLine(decNumber.ToString("0.##")); 

या आप अपने डबल मान को कन्वर्ट की तरह दोगुना कर सकते हैं। Convert.ToDouble([double vlaue]) । यदि शून्य हो तो यह शून्य से पीछे हो जाएगा।

इस तरह की कोशिश करो

 string s = "2.4200"; s = s.TrimStart('0').TrimEnd('0', '.'); 

और फिर उस फ्लोट को परिवर्तित करें