Как преобразовать строку в длинный двойной?

Для начала я тщательно изучил другие вопросы по этому вопросу, и ничто не помогло мне. Мне нужно преобразовать строку в длинный двойной тип, и у меня ничего не работает.

string a="634.232";
long double x;
x=strtold(a.c_str(),0);

Например: этот "strtold" изменяет этот вход в этот выход.

2 ответа

Проверьте на ошибки:

#include <cerrno>
#include <cstdlib>
#include <iostream>

const char str[] = "634.232";

int main()
{
    char * e;
    errno = 0;
    long double val = std::strtold(str, &e);

    if (*e != '\0' || errno != 0) { /* error */ std::abort(); }

    std::cout << "SUccessfully parsed: " << val;
}

Обратите внимание, что синтаксический анализ строки может завершиться неудачей несколькими способами: строка может не представлять или не полностью представлять число, или число, которое она представляет, может быть слишком большим, чтобы поместиться в тип данных. Вы должны проверить все эти возможности, что и делает этот код. Указатель конца e проверяет, что мы использовали всю строку, и errno проверяет, что преобразование прошло успешно.

strtold должно работать нормально, как предполагает Kerrek SB.

Но пока вы проверяете свою работу, я бы рекомендовал использовать stold: http://www.cplusplus.com/reference/string/stold/

string a{"634.232"};
long double x{stold(a)};
Другие вопросы по тегам