How to specify setprecision rounding

前端 未结 4 2149
不思量自难忘°
不思量自难忘° 2020-12-02 00:34

Can I specify setprecision to round double values when stream to std output?

ofile << std::setprecision(12) << total_run_time/TIME << \"\\n         


        
4条回答
  •  情深已故
    2020-12-02 01:11

    There is also std::fesetround from , which sets the rounding direction:

    #include 
    #include 
    #include 
    #include 
    
    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.

提交回复
热议问题