0.00<>0.0(BIGDECIMAL类型 的比较)

现实中,0.00不等于0.0,这是不是太不智能?但是在JAVA上看来,这是正常的,因为类型的原因 ,因为精度的关系,所以不等。

在.NET 中

 

 Decimal cc = 266.00m;
            Decimal dd = 266.0m;

            if (cc == dd)
            {
                return "true";
            }
            else
            {
              return  "false";
            }

 

返回的是TRUE

而在JAVA中

BigDecimal xx=new BigDecimal(366.00);
 BigDecimal yy=new BigDecimal(366.0);
 log.info("=={}equals{}compareto{} ",xx==yy,xx.equals(yy),xx.compareTo(yy)==0);

==返回的是FALSE

另外:在比较两个BigDecimal的值是否相等时,要特别注意,使用equals()方法不但要求两个BigDecimal的值相等,还要求它们的scale()相等:

必须使用compareTo()方法来比较,它根据两个值的大小分别返回负数、正数和0,分别表示小于、大于和等于。

 总是使用compareTo()比较两个BigDecimal的值,不要使用equals()!

如果查看BigDecimal的源码,可以发现,实际上一个BigDecimal是通过一个BigInteger和一个scale来表示的,即BigInteger表示一个完整的整数,而scale表示小数位数:

 

这真是科学而不智能。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值