BigDecimal bd= new BigDecimal("00.0000000000");
//now bd format to 0E-10
if(BigDecimal.ZERO.equals(bd) || bd.equals("0E-10"))
{
flag=true;
}
上面的代码有两个问题
- 为什么变量bd自动格式化为0E-10
- if 条件结果为假值,即它不会进入 if block 内。
谁能推荐一下。谢谢
最佳答案
您已经为构造函数提供了小数点后十位数字,因此即使它们全部为零,BigDecimal
仍决定将其内部 scale
设置为 10。这解释了 “0E-10”
中的 -10
。
至于等于
,Javadoc says :
Compares this
BigDecimal
with the specifiedObject
for equality. UnlikecompareTo
, this method considers twoBigDecimal
objects equal only if they are equal in value and scale (thus 2.0 is not equal to 2.00 when compared by this method).
底线:
- 使用
compareTo()
而不是equals()
。 - 不要直接将
BigDecimal
与String
进行比较,因为这样是行不通的。
关于java - java中的BigDecimal问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7525284/