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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值