у меня есть следующая часть кода:
string v;
getline(linestream,v,' ');
double d=atof(v.c_str());
fprintf(writeFile3,"%f\n",(double)d);
но допустим, что первая строка имеет значение 0,08012901, но d = 0,080129, последние 2 значения опущены, как я могу получить полное двойное значение?
Спасибо
Дело не в том, что десятичные разряды не хранятся в d
, Это просто fprintf
по умолчанию печатает только 6 знаков после запятой. Чтобы напечатать 8, попробуйте
fprintf(writeFile3, "%.8f\n", d);
Вы не должны бросать d
как double
так как это уже имеет тип double
,
Если вы хотите, чтобы цифры копировались точно, безусловно, самый простой способ — просто оставить цифры в виде строки:
string v;
getline(instream, v, ' ');
outstream << v;
Почти все, что преобразует цифры в double
, а затем распечатывает значение, по крайней мере, имеет некоторый шанс получить результат, который немного отличается от ввода.
Я бы добавил к ответу выше, что все, что вы поставите после вызова переменной, будет отображаться. По умолчанию C ++ покажет 6.
т.е.
fprintf (writeFile3, «% .3f \ n», (double) d); будет отображать 3 десятичных знака в конце. Он также будет дополнен, так что если возможно, чтобы было больше 8 знаков после запятой, вы захотите сделать это больше, чем это. То, что я знаю о вас, не может установить флаг, чтобы просто отображать все десятичные точки. Это должно быть явным.