【问题标题】:Printing doubles without zeroes at the end?最后打印没有零的双倍?
【发布时间】:2015-06-17 13:13:47
【问题描述】:

有没有办法在 c 中使用 fprint 打印双精度数,以便打印的精度尽可能低(例如,一个整数总是打印不带小数?)

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

【问题讨论】:

  • 1.0/3.0 表达式的结果你希望打印什么?
  • 是的。 1/3.0 可能具有最接近的 double 一些值,例如 0.3333333333333333148296162562473909929395 那么你期望什么?
  • 这就是为什么我说只有当它可以以 10 为底有限表示时。
  • 使用DBL_DECIMAL_DIG 有效数字打印足以区分所有double。因此,过去的其他数字具有有限的价值。代码可以使用printf("%.*le", DBL_DECIMAL_DIG - 1, some_double),这是问题的上限。

标签: c printf double


【解决方案1】:

所有有限double,以基数 10 或基数 2(通常)编码,或者基数 16 可以完全以基数 10 有限打印。DBL_MIN这样做可能需要 100 多个数字,但它不是无限的。 printf() 不需要执行到那个级别。所以它最终是自定义代码,当然可以“打印没有零的双精度数”

推荐sprintf(buffer, "%.*e", DBL_DECIMAL_DIG - 1, some_double) 并根据需要对缓冲区进行后处理以删除最不重要的0,以便对代码目标“足够接近”。

Ref

【讨论】:

    猜你喜欢
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多