JAVA中float、double、BigDecimal的区别及数据类型注意事项

本文详细介绍了单精度浮点数(float)与双精度浮点数(double)的区别,包括它们在内存中占用的空间大小、有效数字位数、表示数值的范围以及处理速度的不同。同时探讨了在实际编程过程中遇到的精度问题,并提出了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单精度浮点数(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


数据类型注意事项:

1、Integer c = 3;
    Integer d = 3;
    Integer e = 321;
    Integer f = 321;
    System.out.println(c == d);
    System.out.println(e == f);

输出 true false

Integer为对象判断是否相等还是使用equals最靠谱,int为基本类型,判断是否相等就是可以使用==。因为cache中已有-128到127,不在这范围的会新new ,这时可以理解比较是内存地址,也就是是不是同一对象。所以说当Integer的值不在-128到127的时候使用==方法判断是否相等就会出错,在这个范围之内的就会没有问题!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值