8.48 避免使用float,dobule进行精确计算

不能使用float、double进行精确计算,因为浮点数本身是不精确的,如以下代码:

		double result=1.00d-0.90d;
		System.out.println(result);//打印0.09999999999999998

 

可以使用BigDecimal进行精确计算,BigDecimal可以表示任意精度的数字,如下:

		BigDecimal first=BigDecimal.valueOf(1.00d);
		BigDecimal second=BigDecimal.valueOf(0.90d);
		BigDecimal result=first.subtract(second);
		System.out.println(result.doubleValue());//打印0.1

 

BigDecimal是不可变类,使用此类可能影响性能。因此可以考虑使用int,long进行计算。假设上例仅有两位小数,并且确定计算结果不会超出int类型所能存储的最大数字,那么可把数字放大100倍,作为int类型进行计算

 

小数计算基本原则如下:

1.优先使用BigDecimal进行小数计算

2.如果需要提高计算性能,可以使用int或long进行计算,但是需要自行处理小数位数,并且int类型不能超过9位小数,long类型不能超过18位小数

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值