我变量是这样定义的:
float a = 2.11f;
float b = 2;
那么a+b=4.1099997
这是为什么呢?帮我解释一下这个,还帮我讲解一下float类型的特点。谢谢啦!
我变量是这样定义的:
float a = 2.11f;
float b = 2;
那么a+b=4.1099997
这是为什么呢?帮我解释一下这个,还帮我讲解一下float类型的特点。谢谢啦!
很明显是float的精度问题;最后的几位被截断换算的时候弄丢了.就差了一些
float数据占用32bit, 在计算机存储中,首先要将上面的数更改为二进制的科学计数法
无论是单精度还是双精度在存储中都分为三个部分:
符号位(Sign) : 0代表正,1代表为负 1位 指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储 8位 尾数部分(Mantissa):尾数部分 23位
#include <stdio.h> void main() {
float a = 2.11f;
float b = 2;
//那么a+b=4.1099997 printf("a+b=%f",a+b);
}
结果该等于
float 类型也就是实型数据,上面你赋值=2 其实后面会加0的,提高精度!
你上面的a+b 的结果应该不对吧?或者说你用的什么编译器?
你看到的2.11+2=4.11的情况是我们已十进制的方式计算。
而计算机是以二进制的方式计算的,算出结果后又转化成十进制展示给我们看
关键是2.11再往二进制转化的时候,是无限小数
所以计算出结果是4.1099997
float和double不精确
它会自动在小数里面进行四舍五入的操作。