现实中,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表示小数位数:
这真是科学而不智能。
本文探讨了在Java和.NET中,浮点数与BigDecimal类型的比较差异。在.NET中,Decimal类型比较会返回TRUE,而在JAVA中,使用BigDecimal的equals()方法会考虑scale,导致不等。正确的比较方式是使用compareTo()。理解这些细节对于避免精度问题至关重要。
8221

被折叠的 条评论
为什么被折叠?



