如何修改以下代码等以产生所需的结果?
我有一个包含 400 多个浮点数的字符串,我一直试图将其放入包含 400 个元素的浮点数组中。我不想使用 sscanf 因为我的语句会对每个元素都有显式引用。
使用 stringstream,我可以做得更简洁,但我得到了额外的尾随数字。我也许可以使用位运算来删除不需要的数字。
下面是一个测试用例,希望能够概括我想要做的事情。
背景:我使用 LibXML 创建字符串,因为我的旧版本 g++ Boost 库不喜欢其中包含点的元素。
#include <iostream>
#include <sstream>
#include <stdio.h>
using namespace std;
int main(){
float a, b, c;
std::string str = "123456.780 234567.8 345678.912";
std::stringstream s(str);
s.setf(std::ios::fixed);
s.precision(2);
s >> a >> b >> c;
printf ("a = %f, b = %f, c = %f\n",a,b,c);
return 0;
}
Output:
a = 123456.781250, b = 234567.796875, c = 345678.906250
我尝试使用 set precision、 precision 和 width 但没有成功。
在 C 或 C++ 语言中,浮点数通常采用 IEEE-754 二进制 32 格式,尾数只有 24 位,可容纳大约 7 个十进制数字(ref.)。这意味着任何 8 位或更多位的数字都可能显示错误的值。并且您希望整数部分有 6 位 + 小数部分有 2 位 => 小数点后第二位数字的值是错误的。
可以做什么?
double
而不是 float