【问题标题】:String to long double conversion in c++98c++98中的字符串到长双精度转换
【发布时间】:2017-05-05 16:54:25
【问题描述】:

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

string S = "3.236568949" 

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

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

【问题讨论】:

  • “字符串中的确切数字”...祝你好运。
  • 除非您使用十进制浮点类型,否则无法获得准确的值

标签: c++ c++98


【解决方案1】:

你可以使用 C 函数:

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

【讨论】:

  • OP 想要long doubleatof() 返回double
  • OP 想要一个long double
【解决方案2】:

您可以使用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?

【讨论】:

  • 你的代码工作得很好,我可以为 ld 选择特定的精度吗?
  • @user288086 您无法设置输出的精度,但您可以为输入到stringstream 的内容指定精度。
  • @user288086 就像您使用 cout 一样。
  • 请告诉我。
  • @user288086 好吧,您可以从原始字符串中提取一个仅包含所需数字的子字符串,或者执行this 之类的操作,但考虑到浮点表示的性质(请阅读由NathanOliver 和提到的doc) 这似乎是一种徒劳的练习。
【解决方案3】:

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

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

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

【讨论】:

  • 此函数仅在 C++11 中的 C++ 中可用。 OP 需要 C++98 解决方案。
  • C99有这个功能
  • @NathanOliver 其实我认为是 C.
  • 在 C99 中并不意味着它是 C++98 的一部分
  • 不代表C99也不可用
猜你喜欢
  • 2014-06-20
  • 2019-05-26
  • 2014-01-01
  • 2013-10-10
  • 2015-04-10
  • 1970-01-01
  • 2012-07-09
  • 2022-01-20
相关资源
最近更新 更多