Ho appena visto un comportamento all'interno di BigDecimal
di cui non ero a conoscenza in precedenza. ve sempre li ha usati come alternativa a raddoppiare per le zone dove la precisione è importante. per esempio in calcoli finanziari.Ci sono altri trucchi simili a BigDecimal ("1.0"). Equals (new BigDecimal ("1") restituisce false?
Tuttavia ho recentemente imbattuto in questo fatto
new BigDecimal("1.0").equals(new BigDecimal("1")) == false
devo ammettere che sono rimasto sorpreso da questo. Immagino che sia perché il primo ha una scala di 1 mentre il secondo ha una scala di 0, ma sembra comunque contro-intuitivo. Penso che la ragione per cui non ho mai imbattersi in prima è perché abbiamo sempre usato la bilancia fissa BigDecimals
per i calcoli finanziari.
Controllo della BigDecimal
documentation posso vedere che dice che compareTo() == 0
dovrebbero essere utilizzati per verificare la presenza di scala uguaglianza ignorando mentre quello equals()
confronta sia il valore e la scala.
Esistono altri trucchi simili di cui dovrei essere a conoscenza quando si utilizzano BigDecimal
s con scale diverse?
Non intendi nulla che non sia stato documentato nei documenti Java già credo? – CKing
Un trucco simile è che 'new BigDecimal (0.1)' e 'BigDecimal.valueOf (0.1)' restituiscono risultati diversi.Il primo è una rappresentazione del doppio valore e sarà qualcosa come '0.1000000000000000055511151231257827021181583404541015625' mentre il secondo è' 0.1'. – Powerlord
Correlati (possibile duplicato): http://stackoverflow.com/questions/19818537/why-is-bigdecimal-natural-ordering-inconsistent-with-equals – Maroun