首先,我已经彻底检查了有关此事的其他问题,没有任何帮助。我需要将一个字符串转换为long double类型,对我来说没有任何作用。
string a="634.232";
long double x;
x=strtold(a.c_str(),0);
例如:这个" strtold"将this input更改为this output。
答案 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所示。
但是,当您检查自己的工作时,我建议您使用stold
:http://www.cplusplus.com/reference/string/stold/
string a{"634.232"};
long double x{stold(a)};