【问题标题】:How to display the full length of a double with printf in C如何在 C 中使用 printf 显示双精度的全长
【发布时间】:2014-03-31 08:14:53
【问题描述】:

如何在 C 中使用 printf 来显示双精度的全长。

考虑

int main(){

double x = 0.00000000000001;

printf("x: %f \n", x);

}

我得到的结果是“i:0.000000”,但是从我读到的 %f 是正确的格式说明符,双打应该有 15-17 个有效数字,因此我不明白为什么我会得到一个四舍五入的结果。我也尝试过 %15f 和 %lf。

如果有帮助,我正在使用 Ubuntu。

【问题讨论】:

标签: c printf


【解决方案1】:

来自http://linux.die.net/man/3/printf

f,f

双参数被四舍五入并转换为十进制表示法 样式 [-]ddd.ddd,其中后面的位数 小数点字符等于精度规范。 如果 精度缺失,取6;若精度为 明确为零,不出现小数点字符。如果是小数 点出现时,它之前至少出现一位数字。

【讨论】:

  • 谢谢,这也解释了为什么 %15f 添加了空格。
  • 我不确定,现在我知道它是如何工作的,我到处都可以找到解释。
【解决方案2】:

如果要输出小数点后15位,应该是%.15f而不是%15f

printf("i: %.15f \n", i);

【讨论】:

    【解决方案3】:

    使用,

    printf("i: %.15f\n", i);
    

    对于小数点后的精度,指定为 0.15。您在“。”之后指定的数字是为了精确。

    【讨论】:

      【解决方案4】:

      尝试使用 %g 而不是 %f。请参阅printf 规范。

      【讨论】:

        【解决方案5】:

        您可以使用%.<num>f 打印任意数量的小数点后数字。例如;

        printf("i: %.15f \n", i);
        

        打印小数点后15位。

        希望对您有所帮助...

        【讨论】:

          【解决方案6】:

          你能做到的最好的就是以十六进制表示法打印

          printf("i: %a \n", i);
          

          http://pubs.opengroup.org/onlinepubs/9699919799/functions/fprintf.html

          一个,一个 表示浮点数的双参数应转换为“[-]0xh.hhhhp±d”样式,其中有一个十六进制数字(如果参数是规范化浮点数,则该数字应为非零,并且否则未指定)在小数点字符之前和它之后的十六进制位数等于精度;如果缺少精度且 FLT_RADIX 是 2 的幂,则精度应足以准确表示该值;如果缺少精度且 FLT_RADIX 不是 2 的幂,则精度应足以区分 double 类型的值,但可以省略尾随零;如果精度为零且未指定“#”标​​志,则不应出现小数点字符。字母“abcdef”用于转换,字母“ABCDEF”用于A 转换。 A 转换说明符生成一个带有“X”和“P”的数字,而不是“x”和“p”。指数应始终包含至少一个数字,并且仅包含表示 2 的十进制指数所需的更多数字。如果值为零,则指数应为零。

          表示无穷大或 NaN 的双参数应以 f 或 F 转换说明符的样式进行转换。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-06-25
            • 1970-01-01
            • 2010-11-04
            • 2019-05-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多