您的位置:首页 > Web前端

Java:Effective Java 学习笔记(第48条:如果需要精确的答案,请避免使用float和double)

2015-10-14 11:10 162 查看
Effective Java Second Edition 第48条 如果需要精确的答案,请避免使用float和double。

1.简介

float和double类型主要是为了科学计算与工程计算而设计的,它们并没有提供完全精确的结果,所以不应该被用于需要精确结果的场合。在商业计算中要用BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。

2.构造器描述

BigDecimal(int) 创建一个具有参数所指定整数值的对象

BigDecimal(double) 创建一个具有参数所指定双精度值的对象

BigDecimal(long) 创建一个具有参数所指定长整数值的对象

BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象

3.方法描述

add(BigDecimal) BigDecimal对象中的值相加,然后返回这个对象

subtract(BigDecimal) BigDecimal对象中的值相减,然后返回这个对象

multiply(BigDecimal) BigDecimal对象中的值相乘,然后返回这个对象

divide(BigDecimal) BigDecimal对象中的值相除,然后返回这个对象

toString() 将BigDecimal对象的数值转换成字符串

doubleValue() 将BigDecimal对象中的值以双精度数返回

floatValue() 将BigDecimal对象中的值以单精度数返回

longValue() 将BigDecimal对象中的值以长整数返回

intValue() 将BigDecimal对象中的值以整数返回

4.BigDecimal比较

BigDecimal是通过使用compareTo(BigDecimal)来比较的,具体比较情况如下:

public static void main(String[] args) {
BigDecimal a = new BigDecimal("1");
BigDecimal b = new BigDecimal("2");
BigDecimal c = new BigDecimal("1");
int result1 = a.compareTo(b);
int result2 = a.compareTo(c);
int result3 = b.compareTo(a);
System.out.println(result1);
System.out.println(result2);
System.out.println(result3);

}


打印结果是:-1、0、1,即左边比右边数大,返回1,相等返回0,比右边小返回-1。

注意不能使用equals方法来比较大小。

5.BigDecimal缺点

使用BigDecimal的坏处是

与使用基本运算类型想比,这样做很不方便

性能比double和float差,在处理庞大,复杂的运算时尤为明显。

因根据实际需求决定使用哪种类型。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: