Perché BigDecimal è il miglior tipo di dati per la valuta? [duplicare]

10

Stavo leggendo questa domanda e la risposta accettata afferma che BigDecimal è il tipo migliore per rappresentare i valori di valuta. Ho anche visto diverse altre domande che supportano l'uso di grandi numeri decimali.

Perché BigDecimal è il miglior tipo? Non capisco la rilevanza di argomenti come calcoli precisi o persone con un grande patrimonio netto. Sono abbastanza sicuro che non ci sono valute fino al decimo decimale, e quasi nessuno ha un valore di 8-bytes (se dovesse conservarlo per molto tempo).

Per le tasse e altri calcoli intermedi, posso vedere come è importante assicurarsi di utilizzare un tipo corretto che non arrotonda / tronca i valori in modo prematuro, ma non mi sembra rilevante dal momento che un errore di 0,0000000001 centesimi sul dollaro non mi sembrano così grandi.

Può essere dovuto alla mia mancanza di comprensione dell'importanza della precisione quando si tratta di rendiconti finanziari, quindi forse qualcuno può anche chiarire se un milionesimo di un centesimo è significativo come numero finale.

    
posta That Umbrella Guy 11.02.2014 - 17:50
fonte

3 risposte

10

Tutto si riduce alla precisione e Java BigDecimal sembra la risposta corretta su quella piattaforma perché ti offre il miglior supporto per specificare e preservare ciò che può essere una precisione estremamente variabile.

Un milionesimo di un centesimo è solo di 10 -5 da uno spostamento della quantità da pagare, e non è difficile trovare una situazione in cui quel livello di precisione sia importante.

  1. La società A è quotata in borsa, con cinquanta milioni (5x10 6 ) azioni in circolazione e un prezzo corrente di $ 10.
  2. La persona B acquista $ 1 della società A, tramite un broker. Ora possiedono un decimo di una parte o un cinquecentomilionesimo di società A. (10 -7 ).
  3. L'azienda A viene considerata eccessivamente sopravvalutata, e dopo un po 'di scandalo si conclude con l'accettazione di un acquisto di titoli di borsa della società C per un valore di $ 1.000 (10 3 ), con ogni azionista ottiene il numero equivalente da distribuire equamente agli azionisti in contanti o azioni.
  4. Quanto denaro o scorte può ricevere la Persona B? Si noti che se si ottiene il numero sbagliato, la persona B (che è un avvocato senza lavoro nei suoi 30 anni) può rovinare l'intero affare e possibilmente guadagnare uno stipendio facendo causa per il suo valore perso oltre alle spese legali.

Ora, la valutazione è abbastanza assurda di proposito, ma lo stesso vale "hai bisogno di farlo bene o esplode" anche se i numeri sono solo spenti di una quantità minuscola.

    
risposta data 11.02.2014 - 18:43
fonte
7

Il tipo giusto per rappresentare i valori di valuta dipende dall'applicazione.

Due scelte plausibili sono un tipo capace di aritmetica esatta o a tipo a virgola mobile. Si prega di ricordare due fatti:

  1. In aritmetica in virgola mobile, solite identità algebriche (come commutatività e associatività) non regge più. Loro ancora mantieni l'aritmetica esatta.

  2. In aritmetica esatta, non è possibile lavorare con le funzioni diverso dai polinomi, quindi non possiamo usare la radice quadrata o il funzioni esponenziali. L'aritmetica a virgola mobile consente di utilizzare loro.

In un doppio account software di finanza personale, l'aritmetica esatta è preferibile. Ci aspettiamo che tutti i flussi di cassa registrati vengano sommati zero. Poiché si tratta di un'identità algebrica, possiamo verificarla solo se usiamo l'aritmetica esatta. Qui usare un punto variabile renderebbe il intero principe della doppia contabilità inutile.

In un software interno utilizzato da una stanza di compensazione, l'aritmetica esatta è anche obbligatorio, fondamentalmente per la stessa ragione di prima. C'è un principio di conservazione, in modo che i flussi di cassa dovrebbero sempre riassumere zero. Dal momento che il programma deve soddisfare un invariante di algebrico natura, deve fare affidamento sull'aritmetica esatta.

In un software di gestione dei prezzi o di gestione dei rischi che implementa metodi di finanza matematica , complessi calcoli reminescenti di le simulazioni fisiche sono eseguite e le stime delle aspettative sono calcolato. La natura stessa di questo problema richiede l'uso di floating numeri di punto.

    
risposta data 11.02.2014 - 18:14
fonte
3

Qui farò un'ipotesi perché non lo fai nella tua domanda. Perché Bigdecimal è il migliore? Perché è meglio delle alternative.

Why is Bigdecimal better then Float?

Perché in un float non è possibile mantenere precisamente un valore come 0.1 decimale. La rappresentazione binaria di 0.1 decimale sarebbe: binario 0,00011001100110011001100110011001 che se si converte in decimale sarebbe: 0,0999999998603016138.

Ora voglio controllare una condizione di > = 0.1 e vederla fallire .........

    
risposta data 12.02.2014 - 13:21
fonte

Leggi altre domande sui tag