如何在C中使用printf来显示双精度的全长。如何在C中使用printf显示双精度的全长
考虑
int main(){
double x = 0.00000000000001;
printf("x: %f \n", x);
}
结果我得到的是“我:0.000000”,但是从我读%f是正确的格式说明和双打应该有15-17显著的数字,因此我不明白为什么我得到一个圆整的结果。我也尝试过诸如%15f和%lf之类的东西。
我使用Ubuntu,如果有帮助。
如何在C中使用printf来显示双精度的全长。如何在C中使用printf显示双精度的全长
考虑
int main(){
double x = 0.00000000000001;
printf("x: %f \n", x);
}
结果我得到的是“我:0.000000”,但是从我读%f是正确的格式说明和双打应该有15-17显著的数字,因此我不明白为什么我得到一个圆整的结果。我也尝试过诸如%15f和%lf之类的东西。
我使用Ubuntu,如果有帮助。
http://linux.die.net/man/3/printf来自:
F,F
double参数是圆形的,并转换为十进制表示法中 样式[ - ] ddd.ddd,其中数字的 小数点后数点字符等于精度规格。 如果 的精度缺失,则取为6;如果精度为 显式为零,则不会显示小数点字符。如果出现小数点 点,则至少有一个数字出现在它之前。
如果你想在小数点后15位数字输出,它应该是%.15f
而不是%15f
:
printf("i: %.15f \n", i);
使用,
printf("i: %.15f\n", i);
精密后小数点指定为0.15。 “'后指定的号码。是为了精确。
您可以根据需要在%.<num>f
之后打印小数点后的位数。例如;
printf("i: %.15f \n", i);
它在小数点后打印15位数字。
希望它有帮助...
尝试使用%g而不是%f。请参阅printf
规范。
,您可以管理的最好的是十六进制的打印
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转换说明符的形式转换。
阅读有关[表示的数字,转换和四舍五入(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)。 –
另外,另外:避免命名花车“我”;-)。即使在这个尽可能短的样本中,它也是误导性的,因为它与一个已经成为程序员基因库的一部分的惯例相矛盾。 –
@对不起,我现在改变了。 – User