2011-09-29 9 views
7
double d = 1/2.; 
printf("%.2lf\n", d); 

यह प्रिंट 0.50 प्रिंट करता है। यही वह है जिसे मैं ओस्ट्रीम मैनिपुलेटर्स का उपयोग करके दोहराना चाहता हूं। हालांकि, स्पष्ट iomanip मैनिपुलेटर्स में से कोई भी मुझे न्यूनतम आवश्यक दशमलव स्थान सेट करने देता है (यदि मैं सही ढंग से समझ गया, setprecision अधिकतम चौड़ाई सेट करता है)। क्या ऐसा करने के लिए कोई शुद्ध iostream या boost तरीका है?ओस्ट्रीम% .2f या% .2lf

उत्तर

3

fixed के साथ संयोजन मेंका उपयोग करें।

मानक के खंड 22.4.2.2.2 के अनुसार, iostreams पर सटीक विनिर्देशों का बिल्कुल वही प्रभाव होता है जो वे printf के लिए करते हैं। और fixedprintf के %f के समान सटीक व्यवहार देता है।

+0

क्या आप एक लिंक दे सकते हैं? –

+0

@ फ़ूबाह: http://stackoverflow.com/questions/81656/where-do-i-find-the-current-c-or-c- मानक- दस्तावेज़ –

10

आप iomanip हैडर से std::fixed और std::setprecision उपयोग कर सकते हैं:

#include <iostream> 
#include <iomanip> 
int main(void) { 
    double d = 1/2.; 
    std::cout << std::fixed << std::setprecision(2) << d << std::endl; 
    return 0; 
} 

यह आउटपुट 0.50 के रूप में वांछित।

1
+2

वाह, यह एक मच्छर को मारने की कोशिश करने जैसा है थर्मो-परमाणु हथियार :-) – paxdiablo

+0

@ पैक्सडेबल: नहीं, यह वास्तविक समस्या हल करता है। 'printf' प्रकार-सुरक्षित नहीं है (और कुछ हद तक प्रकार के साथ काम करता है), स्ट्रीम स्वरूपण दर्दनाक है (और कुछ मामलों में आपको बिल्कुल एक प्रारूप स्ट्रिंग का उपयोग करने में सक्षम होना चाहिए)। – visitor

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