Как отделить длинный двойник от научной нотации

У меня есть текстовый файл с номерами в научной нотации, хранящиеся в виде строки символов, некоторые из которых имеют до 20 цифры. Например, 2.3456789e-015, Мне нужно преобразовать это в длинный дубль, чтобы выполнить некоторые математические операции над ним.

Как я могу сделать это?

long double number = 2.3456789e-015;

Я знаю, что могу объявить длинный двойной тип, но проблема возникает тогда, когда у меня есть число в виде строки, и мне нужно отдельно указать основание и показатель степени. pow() функция работает только на двойников и cpowl() не может быть отформатирован в printf, Важно, чтобы я сохранил точность!!

3 ответа

Если вы хотите преобразовать строку в long double, используйте [stold][1]

Если хотите printf длинный двойной, используйте %Lf,

Пытаться double atof(const char*),

sscanf(str, "%lf", &number) понимает любые форматы. scanf и sscanf позволяют проверить результат конвертации:

    if( sscanf(str, "%lf", &number) )
    {
        printf("number = %le\n", number);
    }
Другие вопросы по тегам