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.