2010-01-21 24 views
15

मैं दशमलव मान . के बाद अंक के परिवर्तनशील है कि राशि के अंत से 0 सेकंड बाद निकालें, उदाहरण के लिए:दशमलव मान

0.0030 
0.0310 
0.0001 
1.1200 

मैं कैसे एक गतिशील समारोह है कि में 0 को हटा लिख ​​सकते हैं दशमलव का अंत?

उत्तर

20
string.Format("{0:0.#####}", 0.0030) 

या

var money=1.3000m; 
money.ToString("0.#####"); 

भविष्य में संदर्भ के लिए मैं जॉन शीहान द्वारा .NET Format String Quick Reference सलाह देते हैं।

+2

हाँ, लेकिन यदि आपके पास 6 दशमलव स्थान हो या 7 हो? आप # अक्षरों के एक सट्टा बड़े बदसूरत फट के साथ खत्म हो जाते हैं। –

+2

यह संख्याओं को निकटतम 100-हजारवें स्थान पर ले जाएगा। यह ओपी चाहता था या नहीं हो सकता है .. –

+3

@ andrew-m हां # एक अंक प्लेसहोल्डर है। ज्यादातर मामलों में आप जानते हैं कि वांछित परिशुद्धता क्या है। यदि आप पूरी तरह से सुनिश्चित नहीं होना चाहते हैं और आप वर्तमान में उपयोग किए जा रहे डेटाटाइप की पूरी परिशुद्धता का उपयोग कर सकते हैं। 'दशमलव' 28-29 महत्वपूर्ण अंक रख सकता है। हैकी समाधान: 'टॉस्ट्रिंग (" 0। "। पैडराइट (2 9, '#'))' –

3

हम्म, यह एक डिस्प्ले फॉर्मेटिंग समस्या है (जब आप दशमलव को स्ट्रिंग में कनवर्ट करते हैं तो शून्य जोड़े जाते हैं)।

आपको यह देखने की ज़रूरत है कि कोड में आप पिछली बार देख रहे हैं। क्या यह कॉल करने के बाद है। ToString()? विभिन्न स्वरूपण तारों के साथ खेलने का प्रयास करें:

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

और इसी तरह। ऐसा करने का सबसे अच्छा तरीका सिर्फ विभिन्न संभावित मूल्यों के साथ प्रयोग करना है।

2
decimal m = 0.030000m; 
Console.Write(m.ToString("0.##########")); 

बस सुनिश्चित करें कि आप दशमलव स्थानों को प्रदर्शित करना

9
decimal value = 0.0030m; 
value.ToString(“G29″); 

संपादित चाहते हैं की संख्या के लिए पर्याप्त # से कर: जी फ़ॉर्मेटर करता है काम करते हैं, केवल समस्या यह है कि वैज्ञानिक संकेतन के लिए कूदता है यदि मूल दशमलव में बहुत से महत्वपूर्ण आंकड़े हैं। इतना आदर्श नहीं है।

"जनरल (" जी ") फॉर्मेट स्पेसिफायर" यहाँ दस्तावेज़ देखें: http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx#GFormatString

मैं दोपहर के भोजन पर हूँ, इसलिए मैं एक छोटे से परीक्षण किया:

decimal d1 = 0.000100m; 
decimal d2 = 0.001000000000000000000000m; 
decimal d3 = 0.000000000000001000000000m; 

Console.WriteLine(Environment.NewLine + "input decimal: 0.000100m"); 
Console.WriteLine("G   " + d1.ToString("G")); 
Console.WriteLine("G29  " + d1.ToString("G29")); 
Console.WriteLine("0.####### " + d1.ToString("0.#######")); 

Console.WriteLine(Environment.NewLine + "input decimal: 0.001000000000000000000000m"); 
Console.WriteLine("G   " + d2.ToString("G")); 
Console.WriteLine("G29  " + d2.ToString("G29")); 
Console.WriteLine("0.####### " + d2.ToString("0.#######")); 

Console.WriteLine(Environment.NewLine + "input decimal: 0.000000000000001000000000m"); 
Console.WriteLine("G   " + d3.ToString("G")); 
Console.WriteLine("G29  " + d3.ToString("G29")); 
Console.WriteLine("0.####### " + d3.ToString("0.#######")); 

आउटपुट:

input decimal: 0.000100m 
G   0.000100 
G29  0.0001 
0.####### 0.0001 

input decimal: 0.001000000000000000000000m 
G   0.001000000000000000000000 
G29  0.001 
0.####### 0.001 

input decimal: 0.000000000000001000000000m 
G   0.000000000000001000000000 
G29  1E-15 
0.####### 0 
0

मैं निम्नलिखित का उपयोग करता हूं। यह सुनिश्चित करता है कि कोई भी दशमलव (जिसके लिए अधिकतम परिशुद्धता 2 9 दशमलव स्थान है) शून्य के पीछे बिना परिशुद्धता के सभी उपलब्ध अंकों को दिखाएगी, और आपके कोड के बिना हैश अंकों की लंबी बदसूरत स्ट्रिंग की आवश्यकता होगी।

if (value is Decimal) 
    value = ((Decimal)value).ToString("0.".PadRight(29, '#'), culture); 
25

तुम भी दशमलव में ही संशोधित कर सकते हैं ताकि किसी भी toString() आप दे देंगे कि तुम क्या (मेरा उत्तर here में अधिक जानकारी) हैं:

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

यह उत्तर स्वयं का कारण है क्योंकि मूल रूप से इस प्रश्न (और यहां तक ​​कि संपूर्ण विषय) पर हर दूसरे उत्तर के विपरीत काम करता है और ओपी क्या पूछता है। किंडा इन सभी उच्च-प्रतिनिधि उपयोगकर्ताओं को प्रश्न पढ़ने/समझने के बिना जवाब देने के लिए उत्साहित हैं और उन सभी अपवर्तकों को प्राप्त करने के लिए शर्मनाक है जो काम भी नहीं करते हैं। – Coxy

-1
public static string GentlyRemoveEndZeros(string input) 
     { 
      // if (input == null) return null; 
      // if (input == "") return ""; 
      if (input.Contains(".")) return input.TrimEnd('0').TrimEnd('.'); 
      return input; 
     } 
+1

अन्य लोकेशंस के बारे में क्या है जो '।' का उपयोग नहीं करते हैं? –

+0

@ मार्टिनमुल्डर एक ही तरीके से: अगर (इनपुट। कंटेनेंस (",")) इनपुट लौटाएं। टीआरईएनईंड ('0')। ट्रिम एंड (','); – VovaM

+1

@VovaN: सच है, लेकिन क्या आपका उत्तर क्रॉस-कल्चर-सबूत नहीं होना चाहिए? –

-2

काटना अनुगामी शून्य है बहुत आसान, डुप्लेक्स कास्ट के साथ हल करें:

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

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

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

+0

आप सभी मान मानते हैं जो दशमलव में फिट होंगे, जो डबल में फिट होंगे। इससे ओवरफ्लो एक्सेप्शन हो सकता है। आप परिशुद्धता भी खो सकते हैं। –

+0

आप गलत मानते हैं और आपकी टिप्पणी इस चर्चा में कुछ भी नहीं जोड़ती है। जाहिर है, यहां सभी मानते हैं कि मान डबल और दशमलव मानों में फिट हो सकता है। यहां, अतिप्रवाह समस्या नहीं है। सम्मान !! – amedriveroperez

+0

कौन यह मानता है? मैंने 'डबल' की खोज की ... कोई और यह मान रहा है। –

संबंधित मुद्दे