user2529011
user2529011

Reputation: 743

How to display a fixed number of digits in C++ without rounding

I have this code (very basic):

#include <iostream>
#include <iomanip>

using namespace std;
int main()
{
float   a = 0.0,
        b = 0.0,
        c = 0.0;

cout<<"Input a: ";
cin>>a;
cout<<"input b: ";
cin>>b;
cout<<endl;
c = a / b;

cout<<"Result: "<<fixed<<setprecision(2)<<c<<endl;
return 0;
}

When I enter two numbers (say, a = 513 and b = 791) I get 0.65. Calculator shows that the correct answer is 0.648. I understand that my code rounds up the last decimal number but this is not what I want.

How can I get it to where it just stays as 0.64 and not 0.65?

Upvotes: 7

Views: 20613

Answers (2)

Sergey Kalinichenko
Sergey Kalinichenko

Reputation: 727077

If you would like to truncate the value to two decimal places, you can multiply it by 100, truncate to integer, and then divide by 100, like this:

c = a / b;
c = floor(100 * c) / 100;
cout<<"Result: "<<fixed<<setprecision(2)<<c<<endl;

Demo on ideone.

Upvotes: 10

D Stanley
D Stanley

Reputation: 152644

You can use trunc to truncate to a certain number of digits:

c = a / b;

// truncate past two decimals:
c = trunc(c * 100) / 100;

cout<<"Result: "<<fixed<<setprecision(2)<<c<<endl;

of for a generic function:

int trunc(double val, int digits)
{
    double pow10 = pow(10,digits);
    return trunc(val * pow10) / pow10;
}

then use

cout << "Result: " << fixed << setprecision(2) << trunc(c,2) << endl;

Upvotes: 3

Related Questions