c语言问题求解,double,float

img


使用double变量定义x是输入x=0.08iif正常通过,但是定义为float是却不能通过,求解

因为像0.01、0.05这种数据默认是double类型的,你定义的x为float类型,当float和double两种类型相互运算时会自动转为double类型,这个叫自动类型提升,反之则为强制类型转换

是精度的原因 double的精度比float的精度高 精度就是小数点后能精确到多少位 浮点数不可以直接比较 浮点数会因为精度的原因产生误差 比如你输入的是0.08 那么去比较的时候你感觉x的值就是0.08 if(0.08 == x) 应该是true 实际上 编译器比较的时候 0.08可能因为精度的原因变成了 0.07999999 而常量0.08因为默认是double类型,精度更高 产生误差后可能是0.08000000000001 所以你换成double类型后 x的精度也提升上来了 再比较就不容易产生误差