繁体   English   中英

C中的小数位数

[英]Number of decimal digits in C

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

我得到的数字是0.000000而实际值是0.0000003455

这里有两个不同的问题:存储的浮点数的精度,这是通过使用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

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

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

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

@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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM