2014-03-31 39 views
1

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

考虑

int main(){ 

double x = 0.00000000000001; 

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

} 

结果我得到的是“我:0.000000”,但是从我读%f是正确的格式说明和双打应该有15-17显著的数字,因此我不明白为什么我得到一个圆整的结果。我也尝试过诸如%15f和%lf之类的东西。

我使用Ubuntu,如果有帮助。

+0

阅读有关[表示的数字,转换和四舍五入(http://en.wikipedia.org/wiki/Floating_point#Representable_numbers.2C_conversion_and_rounding)和[什么每台计算机科学家应该知道关于浮点算术](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)。 –

+1

另外,另外:避免命名花车“我”;-)。即使在这个尽可能短的样本中,它也是误导性的,因为它与一个已经成为程序员基因库的一部分的惯例相矛盾。 –

+0

@对不起,我现在改变了。 – User

回答

2

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

F,F

double参数是圆形的,并转换为十进制表示法中 样式[ - ] ddd.ddd,其中数字的 小数点后数点字符等于精度规格。 如果 的精度缺失,则取为6;如果精度为 显式为零,则不会显示小数点字符。如果出现小数点 点,则至少有一个数字出现在它之前。

+0

谢谢,这也解释了为什么%15f增加了空白。 – User

+0

不客气。另一方面,你怎么会错过? –

+0

我不确定,现在我知道它是如何工作的,我可以在任何地方找到解释。 – User

1

如果你想在小数点后15位数字输出,它应该是%.15f而不是%15f

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

使用,

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

精密后小数点指定为0.15。 “'后指定的号码。是为了精确。

0

您可以根据需要在%.<num>f之后打印小数点后的位数。例如;

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

它在小数点后打印15位数字。

希望它有帮助...

1

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

0

,您可以管理的最好的是十六进制的打印

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

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

一,A 表示浮点双参数号码应在手册中转换e“[ - ] 0xh。hhhhp±d“,其中在小数点前面有一个十六进制数字(如果参数是一个规范化的浮点数并且在其他情况下未指定,则该数字不为零)和十六进制数字之后的十六进制数字等于精度;如果精度丢失且FLT_RADIX是2的幂,则精度应足以精确表示该值;如果精度丢失且FLT_RADIX不是2的幂,则精度应足够区分double类型的值,除了尾部零可以省略;如果精度为零并且未指定'#'标志,则不会出现小数点字符,字符“abcdef”应用于转换并且A转换的字母“ABCDEF”A转换说明符用'X'和'P'代替'x'和'p'产生一个数字,指数应该总是包含至少一个数字,并且只有更多的数字根据需要表示小数指数为2.如果该值为零,则指数应为零。

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