浮点之间的等值判断(大意了,这波没有闪)


前言

提示:浮点之间的的呢韩国值判断,基本数据类型之间不能用 == 进行比较,包装数据类型不能用鹅equals方法判断


说明:浮点数采用的是“尾数+阶码”,的编码方式,类似科学技术法的“有效数字+指数”,的表示方式,二进制无法精确的表示大不凡的十进制小数。

一、反例!!!!

代码反例如下(示例):

float a = 1.0f - 0.9f;
float b = 0.9f - 0.8f;

if(a == b){

// 预期进入此代码块,执行其他业务逻辑
// 但是a == b 的结果是false

}

Float x = Float.valueof(a);
Float y = Float.valueof.(b);

if(x.equals(y)){

//预期进入此代码快,执行业务
//但是x.equals(y)的结果是False

}

二、正例

代码如下(示例):


<font color=#999AAA >代码如下(示例):


```java
// 方式一 应该指定一个范围的误差,两个浮点数的差值再此范围之内,则认为是相等的
float a = 1.0f - 0.9f;
float b = 0.9f - 0.8f;

//10的-6次方表示
float diff=1e-6f;

if(MAth.abs(a - b) < diff){
System.out.println("true");
}

//方式二  使用BigDecimal来定义值,在进行浮点数的操作运算;
Bigdecimal a = new BigDecimal("1.0");
Bigdecimal a = new BigDecimal("0.9");
Bigdecimal a = new BigDecimal("0.8");

BigDecimal x = a.subtract(b);
Bigdecimal y = b.subtract(c);

if(x.euqals(y)){
System.out.println("true")

}

注意!!!

禁止使用Bigdecimal( double (数据类型) ) 进行double
值转换成Bigdecimal(对象),因为会存在精度丢失,
应该先把double toString为字符串类型,通过呢new Bigdecimal(“double数值”)
例子:new Bigdecimal(“0.1”)
或者通过 Bigdecimal.valueof( 0.1);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值