2010-03-22 9 views
12

के लिए दशमलव स्थानों की न्यूनतम संख्या निर्धारित करना क्या कोई std :: ostream आउटपुट होने वाले दशमलव स्थानों की "न्यूनतम" संख्या सेट करने का कोई तरीका है?std :: ostream precision

उदाहरण के लिए, कहते हैं कि मैं दो अज्ञात डबल चर है कि मैं (मानों यहां चित्रण के लिए जोड़ा) प्रिंट करना चाहते हैं:

double a = 0; 
double b = 0.123456789; 

मैं इतना है कि मैं उत्पादन b वास्तव में अपनी अधिकतम दशमलव परिशुद्धता सेट कर सकते हैं

std::cout << std::setprecision(9) << b << std::endl; 
>>> 0.123456789 

वहाँ एक "न्यूनतम" परिशुद्धता (दशमलव स्थानों की एक न्यूनतम संख्या) स्थापित करने के लिए एक रास्ता है, जबकि "अधिकतम" परिशुद्धता को बनाए रखना है, ताकि

std::cout << a << std::endl << b << std::endl; 

पैदावार

0.0 
0.123456789 

नहीं

0 
0.123456789 

?

धन्यवाद! फिल


इसका संक्षिप्त उत्तर "नहीं" है। धारा में केवल एक सटीक सेटिंग है, जिसमें अधिकतम और न्यूनतम परिशुद्धता के बीच अंतर करने की कोई सुविधा नहीं है। आपकी उदार सलाह के लिए सभी को धन्यवाद!

+0

प्रश्न को ध्यान से पढ़ें। फिल दशमलव बिंदु के बाद सटीकता के 1 अंकों की न्यूनतम अवधि चाहता है, लेकिन यदि शून्य-शून्य अंक हैं तो अधिक। – Oddthinking

+1

@ फिल: आपको http://stackoverflow.com/questions/2475642/how-to-achieve-the-following-c-output-formatting सहायक मिल सकता है। –

+0

धन्यवाद रोजर। यह बहुत उपयोगी है। आपका फॉर्मेट उदाहरण जाने का सही तरीका दिखता है। –

उत्तर

0

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

यह उचित है, क्योंकि सिर्फ पीछे की ओर शून्य होने का मतलब यह नहीं है कि वहां सटीकता नहीं है, और रन-टाइम यह नहीं बता सकता है।

उदाहरण के लिए, यदि मैं किसी वस्तु के वजन को सस्ते पैमाने पर मापता हूं, तो यह 1.0 किलोग्राम हो सकता है।

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

+0

+1, हालांकि यह अभी भी अस्पष्ट है कि वह वास्तव में क्या चाहता है, शून्य से बिल्कुल "0.0" होना चाहिए। –

+1

उससे कुछ और नहीं, रोजर। मेरे पास एक आवश्यकता है जो आउटपुट स्ट्रीम में दशमलव स्थान के साथ फ्लोट या डबल का प्रतिनिधित्व किया जाता है और मैं ओडथिंकिंग को ऊपर उल्लिखित सटीकता सटीकता के प्रकार के बिना इस सुंदर तरीके से ऐसा करने का एक तरीका ढूंढ रहा हूं। इसलिए 0 को 0.0 के रूप में दर्शाया जाना चाहिए, 0.0000 नहीं ... –

+0

@ फिल: 0.12 के बारे में क्या, आउटपुट "0.120000" ठीक है? "0.000000" ठीक क्यों नहीं है? (वास्तव में यह किस आवश्यकता में असफल हो जाता है?) –

2
cout << setprecision(1) << fixed << d << endl; 

सेटप्रिजन के बाद उपयोग किया गया।

संपादित करें: यह वही है जो आप चाहते हैं। यह डी के आधार पर परिशुद्धता बदल जाएगा।

cout << setprecision(d?9:1) << fixed << d << endl; 
+0

धन्यवाद समीर। हालांकि यह मानता है कि मैं पहले से जानता हूं कि डी = 0। क्या मनमानी डी के लिए कोई समाधान है जो "0.0" प्रिंट करेगा यदि डी = 0, लेकिन "0.123456789" अगर डी = 0.123456789? –

+0

@ फिल: स्ट्रीम में केवल एक सटीक सेटिंग है। आप इसे आउटपुट करने से पहले मूल्य की जांच कर सकते हैं, और अपने "0.0" को आउटपुट कर सकते हैं (ध्यान दें कि स्ट्रिंग अक्षर है, डबल नहीं है)। –

+0

आप ऐसा कुछ कर सकते हैं। cout << setprecision (डी?9: 1) << तय << डी << endl; – Sameer

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