我喜欢在C中使用浮点数时更改显示的小数位数。是否与FLT_DIG
中定义的float.h
值有关?如果是这样,我怎么能把它从6改为10?
我得到一个类似0.000000
的数字,而实际值为0.0000003455
。
答案 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;
}