浮点数表示

为什么浮点数会有精度丢失的风险?

        计算机用二进制表示数字时,宽度是有限的。浮点数转换为二进制时会出现无限循环的情况,因此只能被截断。这也就是解释了为什么浮点数没有办法用二进制精确表示。

浮点数之间的等值判断

        由于计算机表示浮点数时会有精度丢失的风险,因此浮点数之间的等值判断,基本数据类型不能用 == 来比较,包装数据类型不能用 equals 来判断。而是通过判断其差的绝对值小于某个值,就判定相等。

BigDecimal能准确表示浮点数?

        BigDecimal类型使用BigInteger来保存浮点数的值,long型scale表示其小数位,因此BigDecimal 可以实现对浮点数的运算,不会造成精度丢失。

BigDecimal常见方法

1. 为了防止精度丢失,使用BigDecimal(String val)构造方法或者 BigDecimal.valueOf(double val) 静态方法来创建对象。

BigDecimal a = new BigDecimal("1.0");
BigDecimal b = BigDecimal.valueOf(0.1);

2. BigDecimal 对象进行加减乘除操作有其对应的函数

3.  BigDecimal 对象等值比较应该使用compareTo()方法,而不是equals()方法。因为 equals() 方法不仅仅会比较值的大小(value)还会比较精度(scale),而 compareTo() 方法比较的时候会忽略精度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值