{
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
就这么干!
本文探讨了C++中使用cout和stringstream精确控制浮点数输出的方法,避免了默认输出时小数点后位数不准确的问题。通过设置精度和格式,可以确保浮点数的准确显示。

1万+

被折叠的 条评论
为什么被折叠?



