浮点数的大小比较问题

众所周知,计算机表示小数时(float和double),都存在精度上的误差。那么在进行涉及小数的计算时,如果直接拿浮点数计算就会出现精度或是舍入上的奇怪问题。

考虑比较两个小数a和b的大小:

1.如果不需要极度精确的情况,我们可以写作

           if(a - b > -0.0000001) &&(a - b < 0.0000001){

                  //则认为两个数相等

           }

2.当然,若需要绝对相等,可以考虑使用BigDecimal进行比较:

           BigDecimal a = new BigDecimal(double );

           BigDecimal b = newBigDecimal(double );

           int  compare = a.compareTo(b);


compareTo

public int compareTo(BigDecimal val)
将此 BigDecimal 与指定的 BigDecimal 比较。根据此方法,值相等但具有不同标度的两个 BigDecimal 对象(如,2.0 和 2.00)被认为是相等的。相对六个 boolean 比较运算符 (<, ==, >, >=, !=, <=) 中每一个运算符的各个方法,优先提供此方法。建议使用以下语句执行上述比较: (x.compareTo(y) < op> 0),其中 < op> 是六个比较运算符之一。
指定者:
接口 Comparable<BigDecimal> 中的 compareTo
参数:
val - 将此 BigDecimal 与之比较的 BigDecimal
返回:
当此 BigDecimal 在数字上小于、等于或大于 val 时,返回 -1、0 或 1。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值