【发布时间】:2010-07-08 10:44:35
【问题描述】:
在对转换为双精度的字符串执行某些操作后,我遇到了双精度问题。
#include <iostream>
#include <sstream>
#include <math.h>
using namespace std;
// conversion function
void convert(const char * a, const int i, double &out)
{
double val;
istringstream in(a);
in >> val;
cout << "char a -- " << a << endl;
cout << "val ----- " << val << endl;
val *= i;
cout << "modified val --- " << val << endl;
cout << "FMOD ----- " << fmod(val, 1) << endl;
out = val;
return 0;
}
并非所有作为字符串输入的数字都是这种情况,因此错误不是恒定的。 它只影响一些数字(34.38 似乎是恒定的)。
此时,当我传入 a = 34.38 和 i=100 时,它会返回这个:
char a -- 34.38
Val ----- 34.38
modified val --- 3438
FMOD ----- 4.54747e-13
如果我将 Val 更改为浮点数,这将起作用,因为精度较低,但我需要双精度。
当我使用 atof、sscanf 和 strtod 而不是 sstream 时,这也是重现。
在 C++ 中,将字符串正确转换为双精度并实际返回准确值的最佳方法是什么?
谢谢。
【问题讨论】:
-
boost lexical_cast (boost.org/doc/libs/1_43_0/libs/conversion/lexical_cast.htm)
标签: c++ floating-point floating-accuracy