2011-09-23 95 views
5
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

  1. 爲什麼可變BD自動格式化爲0E-10
  2. 如果條件導致假值,即,它如果塊沒有輸入

任何人都可以提出建議。感謝

回答

12

你給構造十個數字小數點後,所以儘管所有的人都爲零,BigDecimal已決定設置其內部scale〜10這解釋了"0E-10"-10

至於equalsJavadoc says

比較此BigDecimal與指定Object平等。 與compareTo不同,此方法僅在兩個對象 只有在值和等級相等的情況下才考慮兩個對象(因此2.0通過此方法進行比較時不等於 2.00)。

底線:

  1. 使用compareTo(),而不是equals()
  2. 不要直接比較BigDecimalString,因爲這不起作用。
5

可以使用

bd.signum() == 0 

BigDecimal.equals測試對於零還包括標度(即10你的情況),因此失敗。一般來說,您應該使用compareTo來比較BigDecimals

1

BigDecimal使用10的小數位數,因爲您在小數點後給出了10位數字,這會回答您的第一個問題。

對於if,第一部分,您將0與00.00000000000進行比較(規模不同,因此它們不相同)。第二,你正在比較一個字符串與BigDecimal。哪個不行。