如何在C中使用printf来显示双精度的全长。
考虑
int main(){
double x = 0.00000000000001;
printf("x: %f \n", x);
}
我得到的结果是" i:0.000000"但是从我读到的内容%f是正确的格式说明符,双打应该有15-17个有效数字因此我不明白为什么我得到了一个圆润的结果。我也尝试过像%15f和%lf这样的东西。
如果有帮助,我正在使用Ubuntu。
答案 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转换说明符的样式转换。