10

每当我在 C 中使用浮点数时,我都喜欢更改显示的小数位数。它与中FLT_DIG定义的值有关float.h吗?如果是这样,我如何将其从 6 更改为 10?

我得到一个数字,就像0.000000实际值为0.0000003455.

4

4 回答 4

18

这里有两个单独的问题:存储的浮点数的精度,由使用floatvs确定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
于 2012-10-06T16:30:42.687 回答
0

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

于 2016-02-27T16:29:21.903 回答
-1

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

另外,您似乎正在使用printf()&co。显示数字 - 如果您决定使用doubles 而不是floats,请不要忘记将格式说明符从%fto更改%lf- 这是双精度数。

于 2012-10-06T16:25:11.663 回答
-1

@kosmoplan - 谢谢你的好问题!

@epsalon - 感谢您的良好回应。我的第一个想法也是“浮动”与“双重”。我误解了。当你意识到它实际上是一个“printf/format”问题时,你一头雾水。做得好!

最后,为了平息一些挥之不去的外围争议:

/*
 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;
}
于 2012-10-06T19:00:54.633 回答