任何人都知道如何将string
转换为long double
?例如,假设我们有
string S = "3.236568949"
我想取字符串中的内容并将其转换为长双变量x
。
注意:在c ++ 11中,它们存在stold
函数,但我使用的是c ++ 98而不是c ++ 11。
另外,我不需要以一定的精度来管理字符串,因为我已经知道setprecision
函数,但我想要的只是转换为long double
。在其他病房,我需要x等于字符串中的精确数字,而不是数字的近似版本。最后,我想告诉你我的字符串包含一个有效的数字。
答案 0 :(得分:0)
你可以使用C函数:
#include <stdlib.h>
int main(){
char* convertme="3.236568949";
double converted=atof(convertme);
return 0;
}
答案 1 :(得分:0)
您可以使用std::stringstream
将字符串转换为long double
。 std::stringstream
的行为与cin
类似,但不是从用户那里获取输入,而是使用std::string
将其加载到流中。看起来像是
std::string data = "3.236568949"
std::stringstream ss(data);
long double ld;
ss >> ld;
请注意,在处理浮点数时,您将不得不处理不精确。有关详情,请参阅Is floating point math broken?
答案 2 :(得分:-1)
您可以使用C99中的strtold()
功能:
std::string
将long double
转换为char * conv(char * str)
{
int l = strlen(str);
char buff[3];
buff[2] = 0;
int oidx = 0;
char *out = malloc(l/2 + 1);
int i;
for( i = 0; i < l; )
{
buff[0]= str[i++];
buff[1] = str[i++];
long x = strtol(buff, 0,16);
out[oidx++] = x;
}
out[oidx] = 0;
return strdup(out);
}
int main(void) {
char* InStr = "04214FABF666DCE7";
char* ans = conv(InStr);
free(ans);
}
。虽然浮点表示是近似的,但是没有人会保证转换后的值与字符串完全相同。