在 C++ 中从 %f 中删除前导和尾随零

Removing leading and trailing zeros from %f in C++

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

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

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

任何 thoughts/suggestions 欢迎。 谢谢

在大多数情况下适用的动态格式只是

%.15g

这意味着 最多 15 位精度。

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

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