{
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
就这么干!