如何在C中用printf显示double的全长

时间:2014-03-31 08:14:53

标签: c printf

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

考虑

int main(){

double x = 0.00000000000001;

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

}

我得到的结果是" i:0.000000"但是从我读到的内容%f是正确的格式说明符,双打应该有15-17个有效数字因此我不明白为什么我得到了一个圆润的结果。我也尝试过像%15f和%lf这样的东西。

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

6 个答案:

答案 0 :(得分:2)

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

  

f,F

     

double参数被舍入并转换为十进制表示法   样式[ - ] ddd.ddd,其后的位数   小数点字符等于精度规范。 如果   缺少精度,如果精度为,则为6;   显式为零,不显示小数点字符。如果是小数   出现点,至少出现一个数字。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

使用,

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

小数点后的精度指定为.15。您在'之后指定的号码。'是为了精确。

答案 3 :(得分:1)

尝试使用%g代替%f。请参阅printf规范。

答案 4 :(得分:0)

您可以使用%.<num>f在小数点后打印尽可能多的数字。 e.g;

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

小数点后打印15位数。

希望它有所帮助...

答案 5 :(得分:0)

您可以管理的最佳方式是以十六进制表示法打印

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

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

  
    
      

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

             

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