如何将字符串转换为long double?

时间:2014-10-21 23:43:01

标签: c++ string iostream typeconverter long-double

首先,我已经彻底检查了有关此事的其他问题,没有任何帮助。我需要将一个字符串转换为long double类型,对我来说没有任何作用。

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

例如:这个" strtold"将this input更改为this output

2 个答案:

答案 0 :(得分: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检查转换是否成功。

答案 1 :(得分:2)

strtold应该可以正常工作,如KerrekSB所示。

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

string a{"634.232"};
long double x{stold(a)};