当我尝试从文件中读取一个浮点数时,我遇到了问题。我需要阅读3行浮点数,如下所示:
v -30.50889491515995 -31.95820181187489 0
(我正在从Rhinoceros的.obj文件中做一个解析器)
这是我的代码(在此之前我读了一个字符串,看看是否是'v'):
fstream f(name.c_str());
...
f>>p.x>>p.y>>p.z;
name是从标准输入开始之前的字符串。
P是结构:
typedef struct Point{
double x;
double y;
double z;
}Point;
问题是所提出的数据是:
-30.5089 -31.9582 0
而不是
-30.50889491515995 -31.95820181187489 0
它以4位小数舍入,我不希望这样!
我试着用fscanf阅读,但我不能发送一个fstream对象。像这样:
fscanf(f,"%f %f %f",p.x,p.y,p.z);
我也尝试了这个,但它不起作用:
f>>setprecision(10)>>fixed>>p.x>>p.y>>p.z;
如何避免这种想法?我需要更高精度的顶点坐标!
非常感谢。
答案 0 :(得分:4)
C ++始终以完全精度输入数字,但您需要指定显示精度(即输出值时):
#include <iostream>
#include <iomanip>
#include <sstream>
int main()
{
std::istringstream iss("30.50889491515995 -31.95820181187489 0");
float x, y, z;
if (iss >> x >> y >> z)
std::cout << std::setprecision(10) << std::fixed
<< x << ' ' << y << ' ' << z << '\n';
}
输出:
30.5088939667 -31.9582023621 0.0000000000
答案 1 :(得分:0)
setprecision
应该做你想做的事。你说它不起作用 - 你从中得到了什么?
您是否尝试在调试器中运行它?是否有可能输入不正确?