কাউট দিয়ে দশমিক পয়েন্টের সঠিক সংখ্যা মুদ্রণ করা


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এটিতে সাহায্য করবে বলে মনে হয় না))

উত্তর:


195

সহ <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
আপনি প্রোগ্রামে "স্টাডি: ফিক্সড" ব্যবহার করেন কেন?
বিলাস জোশী

1
এর জন্য একটি দরকারী শিরোনাম সংজ্ঞায়িত করা যেতে পারে: #define FIXED_FLOAT(x) std::fixed <<std::setprecision(2)<<(x) যা ব্যবহারকে সহজ করে cout<<FIXED_FLOAT(d)
তোলে

12
@ উইলাস জোশি, সংজ্ঞা দশমিকের পরে অঙ্কের সংখ্যা নির্ধারণ করে, যদি 5 টি অঙ্ক থাকে এবং আমরা সেটপ্রেসিশন (2) ব্যবহার করি তবে আমরা 2 টি সংখ্যা পাব, তবে 0 সংখ্যা থাকলে এটি কোনও প্রদর্শিত হবে না, স্থির ব্যবহার করে আমরা স্থির করি যে অনেকগুলি সংখ্যা রয়েছে দেখানো হবে তাই 5 টি 5.00

43

আপনি প্রায় সেখানেই ছিলেন, স্ট্যান্ড :: ব্যবহারের দরকারও ঠিক আছে, http://www.cplsplus.com/references/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 :: setprecision (2) << std :: নির্দিষ্ট << d;
Andrea Girardi

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
}

আপনি নাম স্থান ব্যবহার করছেন না বলে আপনি কৌট এবং আন্ডেলের ঠিক আগে 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

৫.০০ লেখার জন্য আপনাকে স্থির ব্যবহার করতে হবে কেন, আপনার আউটপুট ৫.০০ এর জন্য আসে না।

একটি সংক্ষিপ্ত রেফারেন্স ভিডিও লিঙ্ক আমি যুক্ত করছি যা সহায়ক


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

একটি সামান্য বিন্দু; শিরোনামে নিম্নলিখিত রাখুন

নেমস্পেস স্ট্যান্ড ব্যবহার করে;

তারপর

স্টাড :: কাউট << স্টডি :: ফিক্সড << স্টাড :: সেটপ্রেসিশন (২) << d;

সরলীকৃত হয়

cout << স্থির << নির্ধারণ (2) << d;


2
হ্যাঁ, এটি "সরলীকৃত" হয়ে ওঠে তবে এটি দৃ strongly়ভাবে নিরুৎসাহিত। দয়া করে using namespace std;এটির জন্য ব্যবহার করবেন না - আপনি কেন এমন করছেন তা বুঝতে পারেন।
কার্লোস এফ

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.