Cout के साथ दशमलव बिंदुओं की सही संख्या प्रिंट करना


133

मेरे पास floatमूल्यों की एक सूची है और मैं उन्हें cout2 दशमलव स्थानों के साथ प्रिंट करना चाहता हूं ।

उदाहरण के लिए:

10.900  should be printed as 10.90
1.000 should be printed as 1.00
122.345 should be printed as 122.34

मैं यह कैसे कर सकता हूँ?

( setprecisionइसमें मदद करने के लिए प्रतीत नहीं होता है।)

जवाबों:


196

के साथ <iomanip>, आप उपयोग कर सकते हैं std::fixedऔरstd::setprecision

यहाँ एक उदाहरण है

#include <iostream>
#include <iomanip>

int main()
{
    double d = 122.345;

    std::cout << std::fixed;
    std::cout << std::setprecision(2);
    std::cout << d;
}

और आपको आउटपुट मिलेगा

122.34

6
आपने प्रोग्राम में "std: fixed" का उपयोग क्यों किया?
— विलास जोशी

1
इसके लिए एक उपयोगी हेडर को परिभाषित किया जा सकता है: #define FIXED_FLOAT(x) std::fixed <<std::setprecision(2)<<(x) जो इसके उपयोग को सरल cout<<FIXED_FLOAT(d)
— बनाता है

13
@VilasJoshi, सेटपिरेशन ने दशमलव के बाद अंकों की संख्या निर्धारित की, यदि 5 अंक हैं और हम सेपरेशन (2) का उपयोग करते हैं, तो हमें 2 अंक मिलेंगे, लेकिन यदि 0 अंक हैं, तो यह कोई भी नहीं दिखाएगा, निश्चित अंकों का उपयोग करके निर्धारित करें कि कितना अंक हैं दिखाए जाने के लिए 5 को 5.00 नहीं 5
— vaibnak

43

आप लगभग वहाँ थे, std का उपयोग करने की आवश्यकता है :: साथ ही तय किया, http://www.cplusplus.com/reference/iostream/manipulators/fixed/ देखें

#include <iostream>
#include <iomanip>

int main(int argc, char** argv)
{
    float testme[] = { 0.12345, 1.2345, 12.345, 123.45, 1234.5, 12345 };

    std::cout << std::setprecision(2) << std::fixed;

    for(int i = 0; i < 6; ++i)
    {
        std::cout << testme[i] << std::endl;
    }

    return 0;
}

आउटपुट:

0.12
1.23
12.35
123.45
1234.50
12345.00

18

setprecision(n)पूरे नंबर पर लागू होता है, भिन्नात्मक भाग पर नहीं। इसे आंशिक भाग पर लागू करने के लिए आपको निश्चित बिंदु प्रारूप का उपयोग करने की आवश्यकता है:setiosflags(ios::fixed)


12

स्वीकृत उत्तर को सरल कीजिए

सरलीकृत उदाहरण:

#include <iostream>
#include <iomanip>

int main()
{
    double d = 122.345;
    std::cout << std::fixed << std::setprecision(2) << d;
}

और आपको आउटपुट मिलेगा

122.34

संदर्भ:


इसने मेरे लिए काम किया: std :: cout << std :: setprepy (2) << std :: फिक्स्ड << d;
— एंड्रिया गिरधारी

5

मेरे पास पूर्ण स्वरूपण की इच्छा रखते हुए पूर्णांक के लिए एक समस्या थी।

पूर्णता के लिए फिर से लिखना:

#include <iostream>
#include <iomanip>

int main()
{
    //    floating point formatting example

    double d = 122.345;
    cout << std::fixed << std::setprecision(2) << d << endl;
    //    Output:  122.34


    //    integer formatting example

    int i = 122;
    cout << std::fixed << std::setprecision(2) << double(i) << endl;
    //    Output:  122.00
}

जब से आप नेमस्पेस का उपयोग नहीं कर रहे हैं, तो आप cout और एंडल से पहले std को याद कर रहे हैं।
— ब्लैकफोर्स्ट-टॉम ऑक्ट

@ ब्लैकफोर्स्ट-टॉम - शायद आप सही हैं, याद नहीं कर सकते --- मैं आम तौर पर कॉपी-पेस्ट वर्किंग प्रोग्राम करता हूं, इसलिए यह विजुअल स्टूडियो में या कहीं और चल सकता है।
— मनोहर रेड्डी पोरेड्डी

3

मुझे एक कोडिंग प्रतियोगिता में इस तरह की समस्या थी और मैंने इसे कैसे संभाला। 2 से सभी दोहरे मानों की सटीकता निर्धारित करना

सेटरप्रेशर का उपयोग करने के लिए सबसे पहले हेडर को जोड़ना

#include <iomanip>

फिर हमारे मुख्य में निम्न कोड जोड़ रहा है

  double answer=5.9999;
  double answer2=5.0000;
  cout<<setprecision(2)<<fixed;
  cout <<answer << endl;
  cout <<answer2 << endl;

आउटपुट:

5.99
5.00

आपको लिखने के लिए 5 का उपयोग करने की आवश्यकता है। यही कारण है कि, आपका आउटपुट 5.00 के लिए नहीं आएगा।

एक संक्षिप्त संदर्भ वीडियो लिंक जो मैं जोड़ रहा हूं जो सहायक है


2

आपको तय करने के लिए 'फ्लोट मोड' सेट करना होगा।

float num = 15.839;

// this will output 15.84
std::cout << std::fixed << "num = " << std::setprecision(2) << num << std::endl;

1

दशमलव बिंदु का उपयोग करने के बाद पहले निर्धारित 2 अंक निर्धारित करने के लिए:

cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(2);

फिर अपने दोहरे मूल्यों को प्रिंट करें।

यह एक उदाहरण है:

#include <iostream>
using std::cout;
using std::ios;
using std::endl;

int main(int argc, char *argv[]) {
    cout.setf(ios::fixed);
    cout.setf(ios::showpoint);
    cout.precision(2);
    double d = 10.90;
    cout << d << endl;
    return 0;
}


0

टेम्पलेट्स के साथ

#include <iostream>

// d = decimal places
template<int d> 
std::ostream& fixed(std::ostream& os){
    os.setf(std::ios_base::fixed, std::ios_base::floatfield); 
    os.precision(d); 
    return os; 
}

int main(){
    double d = 122.345;
    std::cout << fixed<2> << d;
}

वैज्ञानिक के लिए भी समान है, एक चौड़ाई विकल्प के साथ भी (स्तंभों के लिए उपयोगी)

// d = decimal places
template<int d> 
std::ostream& f(std::ostream &os){
    os.setf(std::ios_base::fixed, std::ios_base::floatfield); 
    os.precision(d); 
    return os; 
}

// w = width, d = decimal places
template<int w, int d> 
std::ostream& f(std::ostream &os){
    os.setf(std::ios_base::fixed, std::ios_base::floatfield); 
    os.precision(d); 
    os.width(w);
    return os; 
}

// d = decimal places
template<int d> 
std::ostream& e(std::ostream &os){
    os.setf(std::ios_base::scientific, std::ios_base::floatfield); 
    os.precision(d); 
    return os; 
}

// w = width, d = decimal places
template<int w, int d> 
std::ostream& e(std::ostream &os){
    os.setf(std::ios_base::scientific, std::ios_base::floatfield); 
    os.precision(d); 
    os.width(w);
    return os; 
}

int main(){
    double d = 122.345;
    std::cout << f<10,2> << d << '\n'
        << e<10,2> << d << '\n';
}

-3

बस एक मामूली बात; हेडर में निम्नलिखित डालें

नेमस्पेस एसटीडी का उपयोग करना;

फिर

std :: cout << std :: फिक्स्ड << std :: setprepy (2) << d;

सरल हो जाता है

cout << तय << सेटपिरेशन (2) << d;


2
हां, यह "सरलीकृत" हो जाता है, लेकिन यह दृढ़ता से हतोत्साहित किया जाता है। कृपया इसके using namespace std;लिए उपयोग न करें - समझें कि आप ऐसा क्यों कर रहे हैं।
— कार्लोस एफ

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.