现实中,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
表示小数位数:
这真是科学而不智能。
版权归原作者 静_心 所有, 如有侵权,请联系我们删除。