Confrontando BigDecimal
con compareTo()
opere (come in: esso ignorare la scala e confronta il numero reale), ma quando unit test è utile sapere qual è il numero effettivo, specialmente quando il test fallire.
Un'opzione che ho usato in questo caso è stripTrailingZeros()
su entrambi BigDecimal
:
assertEquals(new BigDecimal("150").stripTrailingZeros(),
otherBigDecimal.stripTrailingZeros());
Cosa questa funzione non fa altro che togliere gli zeri senza modificare il numero, quindi "150"
viene convertito in "1.5E+2"
: in questo modo esso doesn' t importa se hai 150
, 150.00
o altro modulo in otherBigDecimal
perché ottengono normalizzato nello stesso modulo.
L'unica differenza è un in otherBigDecimal
darebbe un NullPointerException
invece di un errore di asserzione.
fonte
2017-01-31 08:17:34
Non sono lo stesso oggetto come previsto. Si potrebbe cercare di verificare se sono 'uguali' Nota: BigDecimal non considera' 1000.0' e '1000.00' come il numero di cifre decimali sono diversi. IMHO 'double' è più semplice e non più soggetto a errori. ;) –
@PeterLawrey Mi chiedo quando sarà corretto, non posso davvero come è utile in qualsiasi scenario. – Maroun
@ MarounMaroun Per compatibilità con le versioni precedenti, non verrà mai riparato. –