C++,如何从字符串中获取正确的双精度值?

Posted

技术标签:

【中文标题】C++,如何从字符串中获取正确的双精度值?【英文标题】:C++, how to get right double value from string? 【发布时间】: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吗? 【参考方案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 格式相同。您可以查看其他答案的格式用法。

【讨论】:

以上是关于C++,如何从字符串中获取正确的双精度值?的主要内容,如果未能解决你的问题,请参考以下文章

需要一种用户输入类型的方法:命令行程序的双精度[重复]

如何使用 stringstream 在 C++ 中将字符串转换为双精度值 [关闭]

Inferschema 检测列作为字符串而不是来自 pyspark 中镶木地板的双精度

字符串中的双精度或整数?

将 UDF 从 MS SQL Server 移植到 MySQL 会引发异常不正确的双精度值

我无法从 JSON 解析正确的双精度