最后打印没有零的双打?
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
有没有一种方法可以使用 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