BigDecimal bd= new BigDecimal("00.0000000000");
//now bd format to 0E-10
if(BigDecimal.ZERO.equals(bd) || bd.equals("0E-10"))
{
flag=true;
}
上面的代码有两个问题
任何人都可以建议。感谢
答案 0 :(得分:14)
您已经在小数点后面给出了10位数的构造函数,所以即使它们都为零,BigDecimal
已决定将其内部scale
设置为10.这解释了{{1在-10
。
关于"0E-10"
,Javadoc says:
将此
equals
与指定的BigDecimal
进行比较以获得相等性。 与Object
不同,此方法认为两个compareTo
个对象相等 只有它们在价值和规模上相等(因此2.0不等于 2.00用这种方法比较时。)
底线:
compareTo()
代替BigDecimal
。equals()
与BigDecimal
进行比较,因为这不起作用。答案 1 :(得分:6)
您可以使用
测试零bd.signum() == 0
BigDecimal.equals
还包括比例(在您的情况下为10),因此失败。通常,您应使用compareTo
来比较BigDecimals
。
答案 2 :(得分:1)
BigDecimal使用10的等级,因为你在小数点后面给出了十位数,这就是你的第一个点。
对于if,对于第一部分,您将0与00.00000000000进行比较(比例不同,因此它们不相同)。在第二个中,您将String与BigDecimal进行比较。哪个不行。