【问题标题】:C++, how to get right double value from string?C++,如何从字符串中获取正确的双精度值?
【发布时间】:2017-02-10 09:02:13
【问题描述】:

或者我需要使用哪种类型? 我有字符串,我尝试将其转换为双精度

NFR_File.ReadString(sVal); // sVal = "   0,00003"
dbl = _wtof(sVal);

然后得到:

3.0000000000000001e-05

我需要 0,00003,因为我应该将它作为“0,00003”而不是 3e-05 写入文件。

如果数字大于 0,0009,一切正常。

显示:

sOutput.Format(_T("%9g"),dbl);
NFP1_File.WriteString(sOutput);

我需要它没有尾随零并且还保留 9 位数字(带空格)

【问题讨论】:

  • 值是正确的,只是你如何呈现,你如何显示值的问题。您如何显示值?
  • 其实你已经从字符串中得到了正确的双精度值。
  • 使用你使用的格式字符串,结果是正确的。 Read more about format strings here.
  • 我使用 CString::Format。而且我需要在不带尾随零的情况下显示它,并且还需要保留 9 位数字(空白处有空格)。我编辑了帖子以获取更多详细信息
  • 你试过std::ios_base::precision吗?

标签: c++ mfc double atof


【解决方案1】:

使用 printf 编写时,可以使用 .[decimals]lf 指定所需的有效位数。

例如,在您的情况下,您想打印 5 位小数,因此您应该使用

printf("%.5f", yourNumber);

【讨论】:

  • 我使用 CString::Format。而且我需要在不带尾随零的情况下显示它,并且还需要保留 9 位数字(空白处有空格)。我编辑了帖子以获取更多详细信息
  • 也许是“%9.5f”?
【解决方案2】:

如果你可以使用 C++11

尝试使用http://en.cppreference.com/w/cpp/string/basic_string/to_string

std::string to_string( double value );

【讨论】:

    【解决方案3】:

    CString::Format

    调用此成员函数以将格式化数据写入 CString,其方式与 sprintf 将数据格式化为 C 样式字符数组的方式相同。

    与 c sprintf 格式相同。您可以查看其他答案的格式用法。

    【讨论】:

      猜你喜欢
      • 2017-03-15
      • 1970-01-01
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-01
      • 2010-09-09
      • 2016-05-08
      相关资源
      最近更新 更多