我正在使用stringstream从字符串中解析float。
std::stringstream strs(cp.val);
strs.precision(5);
strs<<std::setprecision(5);
float x; strs>>x;
然而设定的精度功能似乎不起作用.. 有没有办法强制解析不打印精度?
答案 0 :(得分:3)
precision
(以及fixed
和scientific
之类的内容)仅影响输出;输入将解析看起来像数值的任何内容,提取可能属于任何数值的所有字符。 (这包括十六进制字符和整数输入可能出现的&#39; X&#39;如果要以任何方式限制格式,您必须将其作为字符串读取,验证格式,然后使用std::istringstream
进行转换。
答案 1 :(得分:1)
stringstram不允许解析时的精度,但您可以在解析后设置双精度。
E.g。
#include <iostream>
#include <sstream>
#include <iomanip>
#include <cmath>
using namespace std; //do not use that in real project.
int main()
{
// Initial declarations
stringstream ss("13.321646");
double x = 0.0;
// Parse the double
ss >> x;
// Set the double precision to 2decimals
double roundedX = round(x*100)/100;
// output solution
cout << x << endl;
cout << setprecision(5) << x << endl;
cout << roundedX << endl;
return 0;
}
明显的注意:这可以降低精度,而不是改善它。