2012-03-18 13 views
8

Quale è il modo migliore di confrontare un BigDecimal e un int in Java: copiando BigDecimal in int o convertendo int in BigDecimal?Confronto tra BigDecimal e int in Java

+0

Se si converte il BigDecimal in int, si è soggetti a superare il suo intervallo. –

risposta

9

Se vi aspettate il valore BigDecimal per essere davvero grande (cioè al di fuori della gamma di int valori, che è -2 -2 -1) e/o per contenere cifre decimali, o semplicemente vuole Per sicurezza, è necessario convertire lo int in BigDecimal per evitare errori di troppopieno/overflow.

Altrimenti, se le prestazioni sono davvero un grosso problema (cosa rara), lo potrebbe essere essere migliore il contrario.

+1

Questo è esattamente quello che volevo sapere! Grazie a @peter! – HighBit

0

Un motivo per non convertire int in BigDecimal è il fatto che si creerebbe un nuovo oggetto, quindi si sta davvero gettando spazzatura sul vostro heap per eseguire l'uguaglianza. Inoltre, l'uguaglianza primitiva sarebbe più veloce di quella sul vero oggetto BigInteger.

+0

Perché questo dovrebbe essere "buttare la spazzatura sul mucchio"? –

+0

ma questo potrebbe causare un overflow e il risultato potrebbe essere sbagliato. Se BigDecimal bd = maxint +1 e bd vengono convertiti in int il risultato sarà 1 – nist

+0

Certo, dipende dall'utilizzo effettivo Case. @Oli ogni volta per il caso di confronto creerai un nuovo oggetto BigInteger, che potrebbe non essere necessario e che risiede nell'heap, invece di prendere il valore primitivo reale già memorizzato all'interno dell'oggetto BigInt stesso – Bober02

2

Si desidera convertire lo int in uno BigDecimal.

Questo perché non sarà sempre possibile convertire un BigDecimal in un int; perderai qualsiasi informazione dopo il punto decimale e il valore di BigDecimal potrebbe essere al di fuori dell'intervallo di un int.

1

Come BigDecimal estende la gamma di int si dovrà convertire il int in BigDecimal per essere sicuri che possono essere confrontati, in ogni caso.