Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why do floating-point numbers print without decimal unless std::fixed and std::setprecision are used?

I'm experimenting with floating-point output in C++. I have a simple calculation which is 1359270 / 4, in a calculator this results in 339817.5, but when I print it in C++ using std::cout, I get 339818.

Here’s an example:

#include <iostream>
using namespace std;

int main() {
    int var1 = 1359270;
    int var2 = 4;

    cout << static_cast<double>(var1) / var2;
}

I tried to change the variable types to double, but same result.

However, when I used std::setprecision and std::fixed like the example below:

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    int var1 = 1359270;
    int var2 = 4;

    cout << fixed << setprecision(1) << static_cast<double>(var1) / var2;
}

This prints the expected result: 339817.5.

Therefore, is this a floating-point precision issue, or is it related to how std::cout formats numbers?

Note: I'm using MinGW-64 GCC C++20 with Code::Blocks IDE In Windows.

like image 456
Amine Ibn El Fakih Avatar asked Oct 17 '25 11:10

Amine Ibn El Fakih


1 Answers

As you can see in std::ios_base::precision documentation:

The default precision, as established by std::basic_ios::init, is 6.

This is the reason you see 339818 as the output in the first snippet:
std::cout will use a default of 6 digits, and so 339817.5 is rounded to 339818 when printed.

If your var1 was smaller, e.g. 359270 the exact result value (89817.5) would fit into 6 digits and you would see the exact value with the fraction (see demo).

As you already noticed, you can change the default precision.

like image 144
wohlstad Avatar answered Oct 20 '25 02:10

wohlstad



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!