字符串到c ++ 98中的长双精度转换

时间:2017-05-05 16:54:26

标签: c++ c++98

任何人都知道如何将string转换为long double?例如,假设我们有

string S = "3.236568949" 

我想取字符串中的内容并将其转换为长双变量x

注意:在c ++ 11中,它们存在stold函数,但我使用的是c ++ 98而不是c ++ 11。  另外,我不需要以一定的精度来管理字符串,因为我已经知道setprecision函数,但我想要的只是转换为long double。在其他病房,我需要x等于字符串中的精确数字,而不是数字的近似版本。最后,我想告诉你我的字符串包含一个有效的数字。

3 个答案:

答案 0 :(得分:0)

你可以使用C函数:

#include <stdlib.h>
int main(){
   char* convertme="3.236568949";
   double converted=atof(convertme);
   return 0;
}

答案 1 :(得分:0)

您可以使用std::stringstream将字符串转换为long doublestd::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); } 。虽然浮点表示是近似的,但是没有人会保证转换后的值与字符串完全相同。