Для начала я тщательно изучил другие вопросы по этому вопросу, и ничто не помогло мне. Мне нужно преобразовать строку в длинный двойной тип, и у меня ничего не работает.
string a="634.232";
long double x;
x=strtold(a.c_str(),0);
Например: это «strtold» изменения этот вход в этот вывод.
Проверьте на ошибки:
#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
должно работать нормально, так как KerrekSB предлагает.
Но пока вы проверяете свою работу, я бы рекомендовал использовать stold
: http://www.cplusplus.com/reference/string/stold/
string a{"634.232"};
long double x{stold(a)};