【发布时间】:2018-08-16 01:38:21
【问题描述】:
#include <stdio.h>
int main(){
float a;
scanf("%f",&a);
a=(int)(a*1000+0.5);
printf("%.5f\n",a);
a=a/1000;
printf("%.5f\n",a);
return 0;
}
这个程序被编写为以特定方式将浮点数四舍五入到小数点后 3 位;例如65.43296 应该打印为 65.43200,而不是 65.432。
根据逻辑它应该可以工作,但我得到了一个意想不到的答案,如下所示:
1234.56789
1234568.00000
1234.567993
解释这种行为。
【问题讨论】:
-
float精度不高。 -
您可以将 a 从 float 更改为 double,然后将格式说明符从
%f更改为%lf,但由于浮点数的方式,您仍然可能对某些值存在舍入错误代表。 -
您可能想看看这个相关问题:How many significant digits have floats and doubles in java。该问题讨论了 Java,但同样的逻辑也适用于 C。
标签: c floating-point string-formatting truncate