代码之家  ›  专栏  ›  技术社区  ›  Ross McFarlane

C:用printf()打印时,一个双精度字符可以有多长时间?

  •  5
  • Ross McFarlane  · 技术社区  · 17 年前

    我需要指定要从双精度值打印的字符串的确切长度,但我不想限制输出超过必要的范围。

    当使用printf()格式化时,6位精度的双精度数的最大长度是多少?

    具体来说,我应该给x取什么值 printf("%X.6lg",doubleValue); 确保没有截断值?

    我需要具体说明长度的原因是,我定义了一个MPI派生的数据类型,它由许多双值的字符串表示形式组成,并且必须知道它们的确切长度,以便在MPI进程之间划分文件的区域。

    希望清楚。事先谢谢你的回答。

    3 回复  |  直到 17 年前
        1
  •  6
  •   Demi    17 年前

    使用 printf("%.6g", doubleValue) printf("%.6Lg", doubleValue)

    请注意,在精度说明符中去掉前导数字(“宽度”)对值的整数部分的长度没有任何要求。

    还要注意,小写“l”将指定您的值为长整型。大写“l”指定长双精度值。

    另外请注意,如果您不希望这可能被更改为科学记数法(如果它是一个较短的表示法),那么您将使用“f”而不是“g”。

    见A printf reference here .

        2
  •  1
  •   Michiel Buddingh    17 年前

    IEEE双精度数的最大指数是1023,所以最大双精度数是1+1/2+1/4+1/8+…ET** 2 ^ 1023。它将有318个字符长,以十进制表示。

    为什么不使用“e”格式说明符?

        3
  •  1
  •   DevSolar    17 年前

    float.h>包含许多有用的值,其中包括decimal-dig,用于 长双倍 然而。

    同一个文件很可能会告诉您 双重的 在你的平台上有超过6位数的精度…

    PS: 还要注意上面的黛米的回答。他指出了你的printf()中的各种各样的缺陷,这些缺陷逃脱了我的追捕。