JAVA中float、double、BigDecimal的区别

来源:互联网 发布:宣城太守知不知 编辑:程序博客网 时间:2024/06/05 11:26
单精度浮点数(float)与双精度浮点数(double)的区别如下:

(1)在内存中占有的字节数不同

    单精度浮点数在机内占4个字节

    双精度浮点数在机内占8个字节

(2)有效数字位数不同

    单精度浮点数有效数字8位

    双精度浮点数有效数字16位

(3)所能表示数的范围不同

    单精度浮点的表示范围:-3.40E+38 ~ +3.40E+38(10的-38次方到10的38次方)

    双精度浮点的表示范围:-1.79E+308 ~ +1.79E+308(10的-308次方到10的308次方)

(4)在程序中处理速度不同

一般来说,CPU处理单精度浮点数的速度比处理双精度浮点数快

例如:float a=1.3;
则会提示不能将double转化成float  这成为窄型转化
如果要用float来修饰的话,则应该使用float a=1.3f
注意float是8位有效数字,第7位数字将会产生四舍五入
所以如果一个float变量 这样定义:  float a=1.32344435;   则第7位将产生四舍五入(5及5以下的都将舍去)  





请看题:

Java中存储金额用什么数据类型?

示例1

问, 结果是多少? 0.01?

No! 结果是0.009999999999999998!

为什么会这样呢? 因为float和double都是浮点数, 都有取值范围, 都有精度范围. 浮点数与通常使用的小数不同, 使用中, 往往难以确定. 常见的问题是定义了一个浮点数, 经过一系列的计算, 它本来应该等于某个确定值, 但实际上并不是!double相减会转换成二进制,因double有效位数为 16位这就会出现存储小数位数不够的情况,这种情况下就会出现误差,解决方法就是使用BigDecimal,它的有效长度足够长可存储 小数位数因此可代替double来进行加减乘除, 金额必须是完全精确的计算, 故不能使用double或者float, 而应该采用java.math.BigDecimal

原创粉丝点击