如何在C++中读取位数较多的浮点数?
当我尝试从文件中读取浮点数时遇到问题。我需要读取一行中给出的 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;
关于如何避免这种情况的任何想法?我需要更精确的顶点坐标!
非常感谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
C++ 总是以全精度输入数字,但您需要指定显示的精度(即输出值时):
输出:
C++ always inputs the numbers with full precision, but you need to specify the precision for display (i.e. when outputting the values):
output:
set precision
应该做你想做的事情。你说这不起作用——你从中得到了什么?您是否尝试在调试器中运行它?是否有可能是输入不正确?
setprecision
should do what you are wanting to do. You said it didn't work--what did you get out of it?Did you try running it in a debugger? Is it possible that it is not being input properly?