BigDecimal bd= new BigDecimal("00.0000000000");
//now bd format to 0E-10
if(BigDecimal.ZERO.equals(bd) || bd.equals("0E-10"))
{
flag=true;
}
有在上面的代碼的兩個問題BigDecimal的問題在Java
- 爲什麼可變BD自動格式化爲0E-10
- 如果條件導致假值,即,它如果塊沒有輸入。
任何人都可以提出建議。感謝
BigDecimal bd= new BigDecimal("00.0000000000");
//now bd format to 0E-10
if(BigDecimal.ZERO.equals(bd) || bd.equals("0E-10"))
{
flag=true;
}
有在上面的代碼的兩個問題BigDecimal的問題在Java
任何人都可以提出建議。感謝
你給構造十個數字小數點後,所以儘管所有的人都爲零,BigDecimal
已決定設置其內部scale
〜10這解釋了"0E-10"
的-10
。
至於equals
的Javadoc says:
比較此
BigDecimal
與指定Object
平等。 與compareTo
不同,此方法僅在兩個對象 只有在值和等級相等的情況下才考慮兩個對象(因此2.0通過此方法進行比較時不等於 2.00)。
底線:
compareTo()
,而不是equals()
。BigDecimal
到String
,因爲這不起作用。可以使用
bd.signum() == 0
BigDecimal.equals
測試對於零還包括標度(即10你的情況),因此失敗。一般來說,您應該使用compareTo
來比較BigDecimals
。
BigDecimal使用10的小數位數,因爲您在小數點後給出了10位數字,這會回答您的第一個問題。
對於if,第一部分,您將0與00.00000000000進行比較(規模不同,因此它們不相同)。第二,你正在比較一個字符串與BigDecimal。哪個不行。