在C 98中的长双转换

String to long double conversion in c++98

本文关键字:转换      更新时间:2023-10-16

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

string S = "3.236568949" 

我想将字符串内的内容转换为一个长的双变量x

注意:在C 11中,它们的存在stold功能确实如此,但我使用的是C 98不是C 11。 另外,我不需要以某些精度来表达字符串,因为我已经知道setprecision功能,但是我想要的只是转换为long double。在其他病房中,我需要x等于字符串内的 eacter 编号,而不是数字的近似版本。最后,我想告诉你我的字符串包含一个有效的数字。

您可以使用C函数:

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

您可以使用std::stringstream将字符串转换为long doublestd::stringstream的作用就像cin一样,但没有从用户获得输入,而是使用std::string加载到流中。看起来像

std::string data = "3.236568949"
std::stringstream ss(data);
long double ld;
ss >> ld;

请注意,在处理浮点号时,您将不得不处理不精确。有关此的更多信息,请参见浮点数学损坏?

您可以从C99中使用strtold()函数:

long double d = strtold( str.c_str(), nullptr );

std::string转换为long double。尽管浮点表示近似,因此没有人可以保证转换后的值完全相同。