BigDecimal per il calcolo e la visualizzazione di azioni e prezzi azionari?

2

Ricevo file flat con il prezzo delle azioni e il numero di azioni detenute per un account. Un file contiene il prezzo e condivide con 6 posizioni decimali. L'altro file contiene il prezzo e le condivisioni a 12 cifre decimali.

Il sistema deve persistere e visualizzare successivamente questi valori (preferibilmente al numero di cifre decimali ricevute nel file flat). Il prezzo e le azioni dovranno essere utilizzati nei calcoli per le prestazioni (in base alle variazioni di prezzo) e percentuali di detenzione (basate sulle azioni). Le percentuali di rendimento e mantenimento devono essere visualizzate solo con due cifre decimali.

Riuscirai a raddoppiare le mie esigenze qui o è BigDecimal più appropriato?

    
posta James 28.07.2016 - 18:00
fonte

1 risposta

4

No double non soddisferà le tue esigenze.

Se non fosse per aver bisogno di fare calcoli, String sarebbe meglio soddisfare le tue esigenze.

Questo lascia BigDecimal . Calcola più lentamente di double ma calcola fedelmente ogni 10 cifre di base.

Il problema con double è che il modo in cui viene visualizzato è un'approssimazione di ciò che memorizza. Visualizziamo double nella base 10 ma lo memorizziamo nella base 2. Questo va bene quando tutto ciò che rappresenta sono misurazioni di valori continui come la temperatura. Usalo per rappresentare valori decimali discreti di base 10 come il denaro e stai invitando Ron Livingston e Richard Pryor per rubarti i tuoi mezzi penny.

Sembra che anche double debba essere discreto. Dopotutto è memorizzato anche in uno e zeri. In realtà lo è. Ma la base 2 discreta e la base 10 discrete non sempre coincidono come posso mostrare con due righelli che dividono in pollici in modo diverso. Ogni valore di entrambi i righelli può essere rappresentato perfettamente nei nostri computer se BigDecimal rappresenta il righello superiore e double rappresenta il righello inferiore. Tuttavia, non è sempre possibile convertire perfettamente da uno all'altro.

Entrambi corrispondono a 1 pollice. Corrispondono a 1/2 pollice. Non corrispondono a 1/10 di pollice. Per arrivare a 1/10 devi dividere per 5. double sa solo come dividere per 2.

Questo peggiorare è che double cercherà di avvicinarsi all'1 / 10. E potrebbe anche arrotondare il display a dove sembra. 1 è lì dentro. Ma dal momento che non è realmente lì, l'importo che spende è solo in attesa di rovinare i tuoi calcoli.

Provare a double dei tuoi soldi è un problema.

    
risposta data 29.07.2016 - 07:39
fonte

Leggi altre domande sui tag