#include <stdio.h>
int main() {
double a;
a = 0.0045;
printf("a=%.3f", a);
}
#include <stdio.h>
int main() {
double a;
a = 0.00456;
printf("a=%.3f", a);
}
为什么前者没有做四舍五入,输出了a=0.004,而后者做了四舍五入,输出a=0.005呢?难道是0.0045和0.00456在计算机中用什么不同吗?C
c语言用,要大于5才会进行进位,比如a=0.0045,它也等于0.00450,由于保留3位小数,就要看后面的值是否大于50,如果不大于50,则会舍去,
同理下面的a=0.00456,由于保留3位小数,后面的小数位为56,大于50,则会发生进位。
举例说明:
#include <stdio.h>
int main() {
double a,b,c;
a=0.0045;
b=0.00456;
c=0.00451;
printf("a=%.3f\n", a);
printf("b=%.3f\n", b);
printf("c=%.3f\n", c);
return 0;
}
不管是float还是double,都是用二进制的浮点小数来表示十进制的小数,这当中有由于进制转换带来的舍或入的误差,这段程序你可以看到内部的近似值是多少:
#include <stdio.h>
#include <stdlib.h>
int main()
{
double a = 0.0045, b = 0.0044999999999999997;
printf("%.3f ", a);
if ( a == b)
printf("True");
else
printf("False");
return 0;
}
运行结果
0.0044999999999999997 True
表明在内部的存储值确实是小于0.0045的
我以为C是向偶数舍入的,没想到居然是向零舍入。。。