C中的小数位数

时间:2012-10-06 16:22:54

标签: c floating-point

我喜欢在C中使用浮点数时更改显示的小数位数。是否与FLT_DIG中定义的float.h值有关?如果是这样,我怎么能把它从6改为10?

我得到一个类似0.000000的数字,而实际值为0.0000003455

4 个答案:

答案 0 :(得分:14)

这里有两个不同的问题:存储的浮点数的精度,这是通过使用float vs double确定的,然后是这样打印的数字的精度:

float foo = 0.0123456789;
printf("%.4f\n", foo);  // This will print 0.0123 (4 digits).

double bar = 0.012345678912345;
printf("%.10lf\n", bar);  // This will print 0.0123456789

答案 1 :(得分:0)

我试验了这个问题,我发现你不能很好地使用浮动它们真的很糟糕。但是如果你使用双重它会给你正确的答案。只需提及%.10lf即可获得高达10个小数点的精度

答案 2 :(得分:-1)

你的精确度已经不够了。浮点数没有很高的精度,如果你想要更多小数位,请使用double数据类型。

此外,您似乎正在使用printf()&合。显示数字 - 如果您决定使用double而不是float,请不要忘记将格式说明符从%f更改为%lf - 这是一双。

答案 3 :(得分:-1)

@kosmoplan - 谢谢你提出一个好问题!

@epsalon - 谢谢你的回复。我的第一个想法是“浮动”与“双重”。我误解了。你意识到它实际上是一个“打印/格式”问题,你就打了它。干得好!

最后,要解决一些挥之不去的外围争议:

/*
 SAMPLE OUTPUT:
  a=0.000000, x=0.012346, y=0.012346
  a=0.0000003455, x=0.0123456791, y=0.0123456789
 */
#include <stdio.h>

int
main (int argc, char *argv[])
{
  float  x = 0.0123456789, a = 0.0000003455;
  double y = 0.0123456789;
  printf ("a=%f, x=%f, y=%lf\n", a, x, y);
  printf ("a=%.10f, x=%.10f, y=%.10lf\n", a, x, y);
  return 0;
}