cout格式控制输出float/double浮点数

{
            float test = 1.234;
            std::stringstream ss;
            ss << test;
            std::string str_test;
            str_test = ss.str();
            std::cout<< ss.str()<<std::endl;
            std::cout <<test<<std::endl;
            std::cout<<std::setprecision(str_test.length())<<test<<std::endl;
            std::cout <<std::fixed<<test<<std::endl;
            std::cout <<std::setprecision(10)<<test<<std::endl;
}

结果是这样的:

1.234
1.23399996757507324218750000000000000
1.23400
1.23400
1.2339999676

cout的格式控制,多出的部分,有可能是填充随机数,也可能是填充0
 

            double test = 1234567890.123456;
            printf("%lf\n",test);
            printf("%.16lf\n",test);
            std::stringstream ss;
            ss << test;
            std::string str_test;
            str_test = ss.str();
            std::cout<< ss.str()<<std::endl;
            std::cout<< std::setprecision(ss.str().length())<<ss.str()<<std::endl;
            std::cout <<test<<std::endl;
            std::cout <<std::fixed<<test<<std::endl;
            std::cout <<std::setprecision(16)<<test<<std::endl;

结果是这样的:

1234567890.123456
1234567890.1234560012817383
1.23457e+09
1.23457e+09
1234567890.12345600128
1234567890.12345600128
1.23457e+09

结论:直接cout浮点数,后面小数点位数不对,以后就把浮点数转换为string,然后输出,就像下面这样

double test = 1234567890.123456;
std::stringstream ss;
ss << std::fixed <<test;
std::cout<< ss.str()<<std::endl;

结果是这样的:

1234567890.123456

就这么干!

Guess you like

Origin blog.csdn.net/j_____j/article/details/102605758