首先先说下计算机内存里的存储:
内存中最小的单位 位/比特(bit) 二进制数序列中的一个0或一个1就是一个比特,在电脑中,一个比特对应着一个晶体管。
二进制即常说的0和1两个数码来表示的数 基数为2,进位规则是 “逢二进一”
十进制数则用0、1、2、3.........9 , 这十个数来表示。十进制(计du数法)是以10为基础数字系统,进位规则是 “满十进一”
Java中基本数据类型:四类八种:
double float属于浮点数据类型 然而在实际的开发中会发现有误差
public class TestDemo {
public static void main(String args[]){
double a=2.9;
float f=2.4f;
System.out.print("计算结果:");
System.out.println(a-f);
}
}
计算的结果怎么和预想的不一样啊 (嗯。。。脑壳疼)
从计算机的存储原理解释浮点数为何会产生误差:
都知道计算机内部是以二进制进行存储的,因此十进制的有限位的小数在进来之后,会在计算机内部会显示是一个无限位的小数。
Ps:十进制2.9转换为二进制10.1110011001100..................1100无限循环
:
Ps:计算机保存浮点数的精度有限,例如float可以保留十进制最多7位(二进制23位)有效数字,
double可以保留十进制15-16位(二进制52位)有效数字。那有效数字以后的位就被忽略了。
所以现在清楚浮点数据存储是如何产生误差的了吧。