每当我在 C 中使用浮点数时,我都喜欢更改显示的小数位数。它与中FLT_DIG
定义的值有关float.h
吗?如果是这样,我如何将其从 6 更改为 10?
我得到一个数字,就像0.000000
实际值为0.0000003455
.
每当我在 C 中使用浮点数时,我都喜欢更改显示的小数位数。它与中FLT_DIG
定义的值有关float.h
吗?如果是这样,我如何将其从 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
to更改%lf
- 这是双精度数。
@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;
}