BigDecimal bd= new BigDecimal("00.0000000000");
//now bd format to 0E-10
if(BigDecimal.ZERO.equals(bd) || bd.equals("0E-10"))
{
flag=true;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码有两个问题
谁能建议.谢谢
NPE*_*NPE 15
你已经在小数点后面给了十位数的构造函数,所以即使它们都是零,BigDecimal也决定将其内部设置scale为10.这解释了-10in "0E-10".
至于equals,Javadoc说:
将其
BigDecimal与指定Object的相等性进行比较.与compareTo此不同,此方法只考虑两个BigDecimal对象的 值和比例相等(因此,当通过此方法进行比较时,2.0不等于2.00).
底线:
compareTo()而不是equals().BigDecimal,String因为这不起作用.您可以使用测试零
bd.signum() == 0
Run Code Online (Sandbox Code Playgroud)
BigDecimal.equals还包括比例(在你的情况下是10)因此失败.一般来说,您应该使用compareTo以进行比较BigDecimals.