как разобрать длинный двойник из научной нотации

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

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

long double number = 2.3456789e-015;

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


person oneb1got    schedule 12.02.2015    source источник
comment
strtold кажется неплохим кандидатом на эту должность.   -  person WhozCraig    schedule 12.02.2015


Ответы (3)


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

Если вы хотите printf long double, используйте %Lf.

person Mine    schedule 12.02.2015

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

    if( sscanf(str, "%lf", &number) )
    {
        printf("number = %le\n", number);
    }
person VolAnd    schedule 12.02.2015

Попробуйте double atof(const char*).

person CiaPan    schedule 12.02.2015