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 中镶木地板的双精度