不同格式输出实型数的问题
求教为什么此程序的%f输出的结果会是“123.456001”?
#include <stdio.h>
void main()
{
float f=123.456;
double d1,d2;
d1=1111111111111.111111111;
d2=2222222222222.222222222;
printf( "%f,%12f,%12.2f,%-12.2f,%.2f\n ",f,f,f,f,f);
printf( "d1+d2=%f\n ",d1+d2);
getchar();
}
[解决办法]
float double类型并没有绝对精确值的
就跟你比较f类型与0的关系
if(-0.000001<f && f<0.000001)
[解决办法]
用10进制小数不能精确表示某些三进制小数0.1(3)=0.33333333333……(10)
同理,用二进制小数也不能精确表示某些10进制小数。