Формат строки из научной записи в строку без нее - PullRequest
0 голосов
/ 19 марта 2019

У меня есть строка типа "6544556E + 17". Я должен преобразовать его в строку без экспоненциального формата, как "654455600000000000000000".

Как это сделать в C?

Примечание: отсутствует в C ++, поскольку вопрос был ошибочно помечен ранее.

Ответы [ 2 ]

1 голос
/ 19 марта 2019

Вы можете попробовать использовать std::fixed и std::setprecision для отображения числа с плавающей запятой без десятичной точки и формы возведения в степень.

std::ostringstream str;
str << std::fixed << std::setprecision(0) << 6544556E+17 << std::endl;
std::string s = str.str();

Однако на моей машине я не получаю "654455600000000000000000 "в s.Я получаю "654455599999999987941376".Я собираюсь предположить, что 654455600000000000000000 не является точно представимым с использованием представления с плавающей точкой IEEE.Я не уверен, какую логику вам придется использовать для преобразования "654455599999999987941376" в "654455600000000000000000".

1 голос
/ 19 марта 2019

Попробуйте преобразовать строку в удвоенное число с помощью atof, а затем преобразовать ее обратно в строку (при использовании std::fixed, чтобы избежать использования научных обозначений).

#include <sstream>
std::string str = "6544556E+17";
double d = atof(str.c_str());

std::ostringstream strs;
strs << std::fixed << d;
std::string no_scientic_str = strs.str();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...