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
risposta
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.
Questo è esattamente quello che volevo sapere! Grazie a @peter! – HighBit
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.
Perché questo dovrebbe essere "buttare la spazzatura sul mucchio"? –
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
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
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.
Come BigDecimal
estende la gamma di int
si dovrà convertire il int
in BigDecimal
per essere sicuri che possono essere confrontati, in ogni caso.
Se si converte il BigDecimal in int, si è soggetti a superare il suo intervallo. –