[英]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.