У меня проблема с точностью до двойного после выполнения некоторых операций над преобразованной строкой в двойное число.
#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 на float, так как точность ниже, но мне нужно удвоить.
Это также repro, когда я использую atof, sscanf и strtod вместо sstream.
В C ++, как лучше всего преобразовать строку в двойное и на самом деле вернуть точное значение?
Спасибо.