How to specify setprecision rounding
c++, floating-point
Solution
There is also `std::fesetround` from `<cfenv>`, which sets the rounding direction:
#include <iostream>
#include <iomanip>
#include <cmath>
#include <cfenv>
int main () {
double runtime = 0.756247615801;
// Set rounding direction and output with some precision:
const auto prev_round = std::fegetround();
std::fesetround(FE_DOWNWARD);
std::cout << "desired: " << std::setprecision(6) << runtime << "\n";
// Restore previous rounding direction and output for testing:
std::fesetround(prev_round);
std::cout << "default: " << std::setprecision(6) << runtime << "\n";
}
(note that these are not the kind of comments I recommend, they are just for tutoring purposes)
Output:
desired: 0.756247
default: 0.756248
Important note, though: I did not find any mention in the standard, that the `operator<<` overloads for floating types have to honour the rounding direction.
Problem
Can I specify setprecision to round double values when stream to std output? ``` ofile << std::setprecision(12) << total_run_time/TIME << "\n"; ``` Output: 0.756247615801 ``` ofile << std::setprecision(6)<< total_run_time/TIME << "\n"; ``` Output: 0.756248 But I need the output as `0.756247` Thanks