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

来源:互联网 发布:tp5项目源码 编辑:程序博客网 时间:2024/04/25 13:19

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的坏处是

  1. 与使用基本运算类型想比,这样做很不方便
  2. 性能比double和float差,在处理庞大,复杂的运算时尤为明显。

因根据实际需求决定使用哪种类型。

1 0
原创粉丝点击