Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c+中字符串到长双精度转换+;98_C++_C++98 - Fatal编程技术网

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

C++ c+中字符串到长双精度转换+;98,c++,c++98,C++,C++98,有人知道如何将字符串转换为长双精度?比如说我们有 string S = "3.236568949" 我想获取字符串中的内容,并将其转换为长双变量x 注意:在c++11中,它们的existstold函数是这样做的,但我使用的是c++98而不是c++11。 另外,我不需要以一定的精度计算字符串,因为我已经知道setprecision函数,但我想要的只是将其转换为long double。在其他方面,我需要x等于字符串中的精确的数字,而不是该数字的近似版本。最后,我想告诉您,我的字符串包含一个有效数

有人知道如何将
字符串
转换为
长双精度
?比如说我们有

string S = "3.236568949" 
我想获取字符串中的内容,并将其转换为长双变量
x

注意:在c++11中,它们的exist
stold
函数是这样做的,但我使用的是c++98而不是c++11。
另外,我不需要以一定的精度计算字符串,因为我已经知道
setprecision
函数,但我想要的只是将其转换为
long double
。在其他方面,我需要x等于字符串中的精确的数字,而不是该数字的近似版本。最后,我想告诉您,我的字符串包含一个有效数字。

您可以使用C函数:

#include <stdlib.h>
int main(){
   char* convertme="3.236568949";
   double converted=atof(convertme);
   return 0;
}
#包括
int main(){
char*convertme=“3.236568949”;
双转换=atof(convertme);
返回0;
}

您可以使用C函数:

#include <stdlib.h>
int main(){
   char* convertme="3.236568949";
   double converted=atof(convertme);
   return 0;
}
#包括
int main(){
char*convertme=“3.236568949”;
双转换=atof(convertme);
返回0;
}
您可以使用C99的功能:

long double d = strtold( str.c_str(), nullptr );
std::string
转换为
long double
。虽然浮点表示是近似的,所以没有人会保证转换后的值与字符串中的值完全相同。

您可以使用C99中的函数:

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

std::string
转换为
long double
。虽然浮点表示法是近似的,因此没有人会保证转换后的值与字符串中的值完全相同。

您可以使用
std::stringstream
将字符串转换为
长双精度
std::stringstream
的作用类似于
cin
,但不是从用户那里获取输入,而是使用
std::string
将其加载到流中。看起来像

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


请注意,当处理浮点数时,您必须处理不精确性。有关详细信息,请参见您可以使用
std::stringstream
将字符串转换为
长双精度
std::stringstream
的作用类似于
cin
,但不是从用户那里获取输入,而是使用
std::string
将其加载到流中。看起来像

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



请注意,当处理浮点数时,您必须处理不精确性。有关详细信息,请参见

OP想要
long double
atof()
返回
double
OP想要
long double
atof()
返回
double
OP想要
long double
“字符串中的确切数字”。。。祝你好运。除非使用十进制浮点类型“字符串中的精确数字”,否则无法获得精确值。。。如果你使用十进制浮点类型,这个函数只有C++ 11中的C++才可用。OP需要一个C++98解决方案。此函数在中可用C99@NathanOliver事实上,我认为C是C99,并不意味着它是C++ 98.它并不意味着C99是不可用的,这个函数只能在C++ 11中使用C++。OP需要一个C++98解决方案。此函数在中可用C99@NathanOliver事实上,我认为它是C。使用C99并不意味着它是C++98的一部分,也不意味着C99不可用,尽管你的代码很好,我可以为ld选择某些感知吗?@user288086您不能设置输出的精度,但您可以为输入到
stringstream
@user288086的内容指定精度,就像您使用
cout
一样。请告诉我如何操作。@user288086,您可以从原始字符串中提取一个子字符串,仅使用所需的数字或执行类似操作,但鉴于浮点表示的性质(请阅读NathanOliver链接的Q&a和提到的),这似乎是一个徒劳的练习。您的代码运行得非常好,我可以为ld选择某些感知吗?@user288086您不能设置输出的精度,但您可以为输入到
stringstream
@user288086的内容指定精度,就像您使用
cout
一样。请告诉我如何操作。@user288086,您可以仅使用所需的数字从原始字符串中提取子字符串,或执行类似操作,但鉴于浮点表示的性质(请阅读NathanOliver链接的Q&a和提到的),这似乎是一个徒劳的练习。