【问题标题】:Printing integers with thousands separators in Windows using C使用 C 在 Windows 中打印带有千位分隔符的整数
【发布时间】:2010-11-05 18:39:28
【问题描述】:

我想这个问题是不言自明的。我正在使用 printf 和朋友(snprintf 等)来显示一些数百万或数十万范围内的内存统计信息。以我懒惰的思维方式,读取格式为“1,523,556”的数字比“1523556”容易得多。

我已尝试设置语言环境并在格式说明符(%'d 和 %'llu)之前使用撇号标志,但撇号显然是 SUS 的标准,因此它在 Windows 下可能对我不起作用。

是否有用于执行此操作的 Windows 特定 API?我正在使用 Pelles C 并直接使用 ANSI C99 进行编程。

** 编辑 **

在阅读了答案和与之相关的 MSDN 页面后,我明白了为什么 .NET 现在是 Windows 编程的首选方法。它可以平滑大量 API 工作。

【问题讨论】:

  • 这不是真正值得回答的问题,而是来自 C 常见问题解答:c-faq.com/stdio/commaprint.html。我找不到任何类型的 Windows API 可以为您执行此操作,而且您没有运行支持这些 printf 修饰符的 POSIX 系统。
  • @birryee 感谢您的评论。实际上,我在 C 常见问题解答中找到了相同的页面,它提醒了有关在 Linux 下编程的撇号。 :-) 不过在 Windows 上没有这样的运气。
  • 更多相关答案可以在这里找到:stackoverflow.com/questions/1449805/…

标签: c windows number-formatting


【解决方案1】:

Win32 API 确实提供了一个函数,该函数将用千位分组(或任何适合指定区域设置的分组)格式化数字:GetNumberFormat() (http://msdn.microsoft.com/en-us/library/dd318110.aspx)。

不幸的是,这是一个使用起来非常痛苦的 API - 不像 SUS 中的撇号格式说明符那么简单(另一方面,您可以获得很大的灵活性来换取复杂性)

【讨论】:

  • 这正是我一直在寻找但似乎找不到的东西,谢谢。事实上,大多数常规的 C Windows API 使用起来都很痛苦。但正如你所说,功能强大。
【解决方案2】:

使用GetNumberFormatEx(适用于 Windows Vista 及更高版本)。 LOCALE_NAME_USER_DEFAULT 选项使用在控制面板中区域和语言选项下设置的首选项,包括千位分隔符。

【讨论】:

  • 感谢您的回答!这是对我的问题的正确而直接的答案,但我的工作计算机(只有一岁......)仍然都有 XP。噗。我希望我能接受超过 1 个答案。
猜你喜欢
  • 1970-01-01
  • 2013-07-06
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 2014-11-18
  • 1970-01-01
  • 2012-10-16
  • 2020-09-06
相关资源
最近更新 更多