【问题标题】:Float precision not formatting in string浮点精度不在字符串中格式化
【发布时间】:2019-04-17 12:13:40
【问题描述】:

当我编写一个简单的wprintf 函数并使用动词符号L"%.2f" 向它传递一个双精度数时,它只是在屏幕上打印一个“f”而不是格式中的数字0.00.

我需要一些帮助,因为无论我在哪里看到它都只是说L"%.2f" 是打印具有 2 个小数位精度的数字的方法。

float duration = (float)((std::clock() - mTimer) / (float)(CLOCKS_PER_SEC / 1000));
wsprintf(message, L">> Speed: %.2f\r\n", duration);

这是引起我头痛的两条线......它们导致

>> Speed: f

正在控制台上打印。

我正在寻找的输出是这样的:

>> Speed: 4000.00

【问题讨论】:

  • 什么是wsprintf()?标准中有一个swprintf(),但它需要不同的参数......
  • 啊,我想我找到了。 Some Windows thing?如果是这样,请密切注意文档。
  • 谢谢你,我也会研究这个,因为我最后选择了swprintf() 选项。但是我会查看您提供的 MSDN 信息,我只是将代码作为一种爱好,所以我没有真正受过训练或专业的大声笑。我能得到的所有信息都非常感谢。谢谢肖恩

标签: c++ string format precision


【解决方案1】:

函数wsprintf()(好像是windows特有的)不支持浮点参数,你可以改用swprintf()(标准库函数)。

此外,wsprintf 文档中有一条说明:

不要使用。请考虑改用以下函数之一:StringCbPrintf, StringCbPrintfEx, StringCchPrintf, or StringCchPrintfEx。请参阅安全注意事项。

【讨论】:

  • 感谢您的更新,我会看看您所说的一切,然后决定我觉得最好的方式,谢谢
  • 我已经改用swprintf() 这很有意义,非常感谢 P.W 我的代码按预期工作:)
【解决方案2】:

你可以做的是:

cout << fixed << setprecision(2) << message << ">> Speed : "<< duration << endl;

【讨论】:

  • 编写一个记录器,它的接口是通用的纯虚拟类,但它的实现是特定于平台的。我现在正在编写 windows 部分,所以我坚持使用所有 windows 的东西,并利用微软专门为他们的操作系统制作的东西,但你可能是对的,使用流可能是更简单的选择
  • 哦,我的错,我不知道你是想制作一个记录器....应该多加注意,我的借口。
猜你喜欢
  • 2021-08-02
  • 1970-01-01
  • 2017-05-20
  • 2013-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多