2011-08-10 30 views
5

के गुणकों के साथ शक्तियों में वैज्ञानिक नोटेशन के लिए डबल मैं वैज्ञानिक प्रारूप में कुछ बड़ी संख्या को प्रारूपित करने की कोशिश कर रहा हूं, लेकिन मुझे तीन के गुणकों में शक्ति की आवश्यकता है। क्या ऐसा करने का कोई अनुशंसित तरीका है?प्रारूप सी # तीन

मेरे पास एक तालिका में संख्याओं की संख्या है और वास्तविक वैज्ञानिक प्रारूप के बजाय (दशमलव बिंदु से पहले एक अंक के साथ) मुझे तीन में से एक के साथ शक्ति रखने के लिए उस बदलाव को लेकर खुशी है, क्योंकि उदाहरण:

3.123e + 003
19.523e + 003

के बजाय:

3.123e + 003
1.952e + 004

तीन शक्तियों के रूप में सभी शक्तियों को रखने से मेरी तालिका को स्कैन करना आसान हो जाता है, मुझे विश्वास है।

अग्रिम धन्यवाद

+1

इसे आमतौर पर "इंजीनियरिंग नोटेशन" कहा जाता है और इस प्रश्न में भी चर्चा की जाती है: http://stackoverflow.com/questions/808104/engineering-notation-in-c। –

+0

धन्यवाद बी पीट। उस पोस्ट को देखा होता था, लेकिन जब से मैं एक इंजीनियर नहीं हूं, तब से मैंने इकाइयों के साथ भ्रमित होना शुरू कर दिया था, सहयोगी ने सिर्फ तीनों के गुणकों के बारे में पूछा था, जरूरी नहीं कि मेज में इकाइयों के साथ। दिलचस्प पोस्ट हालांकि, मैं इसे एक विकल्प के रूप में फ़्लोट कर सकता हूं :) – Marc

+0

चाहे आप इकाई पदनाम (एम, के, ...) का उपयोग करें या नहीं, मैंने सोचा कि अन्य प्रश्नों में चर्चा की गई कुछ विधियां हल करने में उपयोगी हो सकती हैं जैसा आपने कहा था समस्या। –

उत्तर

4

मैं आप अपने खुद के समारोह लिखने के लिए की जरूरत है। सबसे पहले आप की आवश्यकता के मुकाबले सटीक दो अंकों के साथ संख्या का वैज्ञानिक प्रतिनिधित्व प्राप्त कर सकते हैं। फिर आपको फ्लोटिंग-पॉइंट गुणांक और 10 की पावर इंडेक्स को दशमलव प्रकार की संख्या के रूप में प्राप्त करने के लिए परिणामी स्ट्रिंग को पार्स करना चाहिए। उसके बाद आप विभाजन सूचकांक के शेष 3 का विश्लेषण करते हैं और संख्याओं को उचित तरीके से बदलते हैं। अंत में आप आउटपुट स्ट्रिंग उत्पन्न करते हैं।

static string Scientific3(double value, int precision) 
{ 
    string fstr1 = "{0:E" + (precision+2).ToString() + "}"; 
    string step1 = string.Format(fstr1, value); 
    int index1 = step1.ToLower().IndexOf('e'); 
    if (index1 < 0 || index1 == step1.Length - 1) 
     throw new Exception(); 
    decimal coeff = Convert.ToDecimal(step1.Substring(0, index1)); 
    int index = Convert.ToInt32(step1.Substring(index1 + 1)); 
    while(index%3!=0) 
    { 
     index--; 
     coeff *= 10; 
    } 
    string fstr2 = "{0:F" + precision.ToString() + "}E{1}{2:D3}"; 
    return string.Format(fstr2, coeff, ((index < 0) ? "-" : "+"), Math.Abs(index)); 
} 
+0

आह, अच्छा! पहले से-पारदर्शी स्ट्रिंग का विश्लेषण करने और वहां से इसका उपयोग करने के बारे में सोचा नहीं था। इसे एक कनवर्टर में लिखेंगे और इसे जाने देंगे, विचार और कोड के लिए धन्यवाद: डी – Marc

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

  • कोई संबंधित समस्या नहीं^_^