在对转换为双精度的字符串执行一些操作后,我遇到了双精度问题。
#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++ 中,将字符串正确转换为双精度并实际返回准确值的最佳方法是什么?
谢谢。