2011-09-23 19 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; 
} 

Ci sono due problemi nel codice sopraBigDecimal Problema in java

  1. perché variabile bd formattare automaticamente 0E-10
  2. se risultati condizione valore falso, cioè non entra all'interno se il blocco.

Qualcuno può suggerire. grazie

risposta

12

Hai dato il costruttore dieci cifre dopo la virgola decimale, quindi, anche se tutti sono a zero, BigDecimal ha deciso di impostare il suo interno scale a 10. Questo spiega la -10 in "0E-10".

Per quanto riguarda equals, il Javadoc says:

confronta questo BigDecimal con il specificato Object per l'uguaglianza. , a differenza di compareTo, questo metodo considera due oggetti solo se equivalenti in valore e scala (quindi 2,0 non è uguale a 2.00 se confrontato con questo metodo).

Bottom line:

  1. Uso compareTo() invece di equals().
  2. Non confrontare direttamente BigDecimal a String poiché ciò non funzionerà.
5

È possibile verificare zero usando

bd.signum() == 0 

BigDecimal.equals comprende anche scala (che è 10 nel tuo caso) e quindi non riesce. In generale, è necessario utilizzare compareTo per confrontare BigDecimals.

1

Il BigDecimal utilizza una scala di 10 perché le hai assegnato dieci cifre dopo il punto decimale, che corrisponde al tuo primo punto.

Per il se, per la prima parte, si confronta 0 con 00.00000000000 (la scala è diversa, quindi non sono uguali). Nel secondo, stai confrontando una stringa con un BigDecimal. Quale non funzionerà.