0

首先,我彻底检查了有关该问题的其他问题,但没有任何帮助。我需要将字符串转换为 long double 类型,但对我没有任何作用。

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

例如:此“strtold”将此输入更改为此输出

4

2 回答 2

4

检查错误:

#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检查转换是否成功。

于 2014-10-21T23:46:01.377 回答
2

strtold正如KerrekSB建议的那样,应该可以正常工作。

但是,当您检查您的工作时,我建议您使用stoldhttp ://www.cplusplus.com/reference/string/stold/

string a{"634.232"};
long double x{stold(a)};
于 2014-10-21T23:54:33.203 回答