现实中,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
表示小数位数:
这真是科学而不智能。