float : 单精度浮点数,单精度浮点数最多有7位十进制有效数字
double : 双精度浮点数,double可以处理16位有效数
bigDecimal:是java.math包中提供的API类,用来对超过16位有效位的数进行精确的运算
bigDecimal的四种构造方法:
BigDecimal(int) 创建一个具有参数所指定整数值的对象。
BigDecimal(double) 创建一个具有参数所指定双精度值的对象。(不建议采用)
BigDecimal(long) 创建一个具有参数所指定长整数值的对象。
BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象 [1] 。
单精度浮点数与双精度浮点数所占的内存不同:
单精度浮点数占用4个字节(32位)存储空间来存储一个浮点数,包括符号位1位,阶码8位,尾数23位。
双精度浮点数使用 8个字节(64位)存储空间来存储一个浮点数,包括符号位1位,阶码11位,尾数52位。
使用bigDecimal数据类型的原因:
因double有效位数为16位这就会出现存储小数位数不够的情况,小数的二进制有时并不能精确表示。这种情况下就会出现误差,解决方法就是使用BigDecimal,它的有效长度足够长可存储小数位数。