Domanda

Volevo vedere se la gente usava il decimale per le applicazioni finanziarie invece del doppio. Ho visto molte persone usare il doppio in tutto il luogo con conseguenze non intenzionali. .

Vedi altri che commettono questo errore. . .

È stato utile?

Soluzione

Sfortunatamente l'abbiamo fatto e ce ne pentiamo. Abbiamo dovuto cambiare tutti i doppi in decimali. I decimali vanno bene per le applicazioni finanziarie. Puoi guardare questo articolo Un tipo di denaro per il CLR :

  

Un denaro conveniente e ad alte prestazioni   struttura per il CLR che gestisce   operazioni aritmetiche, tipi di valuta,   formattazione e attenta distribuzione   e arrotondamento senza perdita.

Altri suggerimenti

Sì, l'uso di float o double per i dati finanziari è un errore comune, che provoca molto, molto dolore. decimale è la scelta più ovvia in questo scenario.

Per conoscenza generale, una buona discussione di ciascuno è qui (float / double) e qui (decimale).

Questo non è così ovvio come potresti pensare. Recentemente ho avuto il controller di una grande azienda che mi diceva che voleva che i suoi rapporti finanziari corrispondessero a ciò che Excel avrebbe generato, che mantiene i risultati calcolati internamente con la massima precisione e arrotondando solo all'ultimo minuto a scopo di visualizzazione. Ciò significa che non è sempre possibile abbinare le risposte di Excel mediante calcoli manuali utilizzando solo i valori visualizzati. La sua spiegazione era che c'erano più algoritmi per generare i risultati, ognuno che faceva arrotondamenti in un posto diverso usando valori decimali, quindi potenzialmente generando risposte contrastanti, ma il metodo Excel generava sempre la stessa risposta.

Personalmente penso che abbia torto, ma con così tante persone finanziarie che usano Excel senza capire come usarlo correttamente per i calcoli finanziari, scommetto che molte persone sono d'accordo con questo controller.

Non voglio iniziare una guerra religiosa, ma mi piacerebbe sentire altre opinioni su questo.

Se è " scientifico " la misurazione (intendo peso, lunghezza, area ecc.) usa il doppio.

Se è finanziario o ha qualcosa a che fare con la legge (ad es. l'area di una proprietà), usa il decimale.

La parte difficile sta arrotondando.

Se l'imposta è del 2,4%, arrotondi i dettagli o dopo la somma?

La maggior parte delle volte devi fare entrambe le cose (E sistemare le differenze)

L'ho incontrato alcune volte. Molte lingue non hanno nulla del genere integrato e a qualcuno che non capisce il problema sembra solo un'altra seccatura, specialmente se sembra che funzioni come previsto senza di essa.

Ho sempre usato il decimale. Almeno quando avevo una lingua che la supporta. Altrimenti, gli errori di arrotondamento ti uccideranno.

Sono totalmente d'accordo sulle questioni di correttezza in virgola mobile rispetto al decimale sopra menzionato, ma molte applicazioni finanziarie sono fondamentali per le prestazioni.

In questi casi considererai di usare float / double poiché il decimale ha un grande impatto sulle prestazioni nei sistemi in cui i tipi decimali non sono supportati nell'hardware. E ancora è possibile avvolgere i tipi in virgola mobile in classi di livello superiore (ad es. Tax, Commission, Balance, Dividend, Quote, Tick, ecc ...) che rappresentano il modello di dominio e incapsulano tutta la logica di arrotondamento nonché operatori validi su questi tipi e le loro interazioni. E sì: in alcuni progetti ho implementato funzioni di arrotondamento personalizzate per spremere fino al 20% in più dai calcoli rispetto ai metodi .NET o win32.

Un'altra cosa da considerare è se si passano gli oggetti fuori processo, poiché la serializzazione dei decimali che di solito sono 4 numeri interi e il loro passaggio sul filo richiede molta più CPU (specialmente se non supportata) e comporta una larghezza di banda significativamente maggiore e maggiore impronta di memoria.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top