最后打印没有零的双打?

Printing doubles without zeroes at the end?

有没有一种方法可以使用 fprint 在 c 中打印双精度数,从而使打印的精度尽可能低(例如,总是打印没有小数的整数?)

我知道您可以执行类似 printf("%.0f",number); 的操作但我想知道是否有一种方法可以使用使打印准确的最小精度(当然,只要数字可以以 10 为基数有限地表示)。

所有 有限double,以 10 进制或 2 进制(通常)编码,或者 16 进制可以 exactly 有限地以 10 为基数打印。 DBL_MIN 可能需要 100 多个数字才能这样做,但它不是无限的。 printf() 不需要达到那个水平。所以它最终成为自定义代码,当然可以 "printing doubles without zeros"

建议 sprintf(buffer, "%.*e", DBL_DECIMAL_DIG - 1, some_double) 和 post- 处理缓冲区以根据需要移除最不重要的 0 以实现 "close enough" 代码目标的答案。

Ref