java中的BigDecimal问题

Sun*_*mar 5 java bigdecimal

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)

上面的代码有两个问题

  1. 为什么变量bd会自动格式化为0E-10
  2. 如果条件结果为假值,即如果阻止则不进入内部.

谁能建议.谢谢

NPE*_*NPE 15

你已经在小数点后面给了十位数的构造函数,所以即使它们都是零,BigDecimal也决定将其内部设置scale为10.这解释了-10in "0E-10".

至于equals,Javadoc说:

将其BigDecimal与指定Object的相等性进行比较.与compareTo此不同,此方法只考虑两个BigDecimal对象的 值和比例相等(因此,当通过此方法进行比较时,2.0不等于2.00).

底线:

  1. compareTo()而不是equals().
  2. 不要直接比较BigDecimal,String因为这不起作用.


How*_*ard 6

您可以使用测试零

bd.signum() == 0
Run Code Online (Sandbox Code Playgroud)

BigDecimal.equals还包括比例(在你的情况下是10)因此失败.一般来说,您应该使用compareTo以进行比较BigDecimals.