【问题标题】:Removing leading and trailing zeros from %f in C++在 C++ 中从 %f 中删除前导零和尾随零
【发布时间】:2015-07-20 17:18:41
【问题描述】:

从使用 %f 的 C++ 字符串格式化程序中删除前导零和尾随零的最佳方法是什么。 有一个类似的问题Avoid trailing zeroes in printf() 但这只是说使用 %g 格式化程序。

%g 格式化程序会将 600000000009 输出为 6e+11

我只想从 %f 中删除前导零和尾随零 例如:

  • 000.001 -> 0.001
  • 00.100 -> 0.100
  • .10 -> 0.1
  • 2.0 -> 2

欢迎提出任何想法/建议。 谢谢。

【问题讨论】:

  • 不应该.10 转到0.1 ???
  • 是的,你是对的。抱歉刚刚进行了编辑

标签: c++ regex floating-point string-formatting


【解决方案1】:

在大多数情况下有效的动态格式只是

%.15g

这意味着高达 15 位的精度。

更好的方法是从 15 位开始,然后检查 atof(result) 是否与输入相同,增加位数直到匹配。

直接使用最大位数可能不是一个好主意,因为将 0.1 格式化为 18 位会导致用户看起来很奇怪。

【讨论】:

  • 这不同意所引用问题的公认答案。谁是对的?您能否为您的主张提供一些证据
  • 不确定你的意思。答案是正确的,它在大多数情况下都有效,除非您的应用程序有不同的精度标准。
猜你喜欢
  • 2022-10-14
  • 2014-08-09
  • 2012-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-01
相关资源
最近更新 更多