读书人

8.48 避免运用floatdobule进行精确计

发布时间: 2013-08-20 17:47:51 作者: rapoo

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位小数

?

?

?

读书人网 >编程

热点推荐