下面这段代码,输出值是多少呢?
void main()
{
float data = 266270.83;
printf("data=%0.2f\n",data);
}
在我32位的虚拟机上,打印输出值是:data=266270.84
为什么会出现这种情况呢,难道是计算机出问题了。
当然不是计算机出现了问题,我们从下面几点来分析探讨。
首先,我们从浮点数在内存中的存储形式来分析。
大家都知道,数据在内存中是以010101这种二进制的形式存储的,那浮点数相对整数的存储又有哪些特殊的地方呢。
按照科学计数法,浮点数在内存中分三部分存储,分别是符号位、指数位、尾数位。
float:单精度浮点数,1位符号位,8位指数位,23位尾数位,总共32位
double:双精度浮点数,1位符号位,11位指数位,52位尾数位,总共64位。
所以,我们需要把浮点数先转换成二进制表示,转换遵循以下规则
1、先把整数部分和小数部分分别转换为二进制形式
2、整数部分转换为二进制形式采用“除2取余,逆序排列”法,即整数部分除以2,取出余数&