2009-03-06 14 views

risposta

40

Decimale e denaro dovrebbero essere abbastanza affidabili. Quello che posso assicurarti (dalla dolorosa esperienza personale derivante da applicazioni ereditate) è DO usa float!

+1

Perché no? Che problemi hai usato float? –

+7

Errori di arrotondamento molto probabilmente – nalply

+2

La sua applicazione probabilmente ha totalizzato circa 200.000 importi e ha esaurito le cifre –

10

Immagino che si riduca a precisione e scala. IIRC, money è 4dp. Se ciò va bene, money esprime il tuo intento. Se si desidera un maggiore controllo, utilizzare decimal con una precisione e una scala specifiche.

15

Uso sempre il decimale; mai usato DENARO prima.

Recentemente, ho trovato un articolo per quanto riguarda decimale rispetto al tipo di dati soldi in SQL Server che si potrebbe trovare interessante:

Money vs Decimal

Sembra anche che il tipo di dati soldi non sempre risultato in risultati accurati quando si eseguire calcoli con esso: click

Ciò che ho fatto in passato, sta utilizzando un campo INT e memorizza l'importo in centesimi (centesimi di dollaro/dollaro).

+0

Potresti per favore approfondire come possiamo rappresentare 100/3, 10/3 e 1/3, ecc.? – NoChance

4

Dipende dalla vostra applicazione !!! Io lavoro nei servizi finanziari dove normalmente consideriamo il prezzo significativo a 5 decimali dopo il punto, che ovviamente quando acquisti un paio di milioni a 3,12345pence/centesimi è una quantità significativa. Alcune applicazioni forniranno il proprio tipo di SQL per gestirlo.

D'altra parte, questo potrebbe non essere necessario. <Umorismo> Le percentuali dei contraenti sono sempre sembrate arrotondate ai 100 sterline più vicini, ma attualmente sembrano essere di circa £ 25 sterline nell'attuale crisi del credito. </Humor >

1

Utilizzare i decimali e utilizzare più posizioni decimali di quelle che si ritengono necessarie in modo che le coclulazioni siano corrette. Il denaro non restituisce sempre risultati corretti nei calcoli. In nessun caso utilizzare float o real in quanto si tratta di tipi di dati inesatti e può causare errori di calcolo (soprattutto quando diventano più complessi).

2

Non allineare i pensieri in base ai tipi di dati disponibili. Piuttosto, analizza i tuoi requisiti e poi vedi quale tipo di dati si adatta meglio. Float è in qualsiasi momento la scelta peggiore considerando la limitazione dell'architettura nella memorizzazione della versione binaria dei numeri in virgola mobile. Il denaro è un'unità standard e avrà sicuramente più supporto nella gestione delle operazioni legate al denaro. In caso di decimale, dovrai gestire ciascuno e tutto ma sai che sono solo tu a gestire un tipo decimale, quindi nessuna sorpresa che potresti ottenere con altri due tipi di dati.

1

Per alcuni dati (come il denaro) in cui non si desidera l'approssimazione o le modifiche a causa del valore float, è necessario assicurarsi che i dati non siano mai "mobili", che debbano essere rigidi su entrambi i lati del separatore decimale.
Un modo semplice per essere sicuri è valutare il valore convertendolo in tipo di dati INTEGER e accertarsi che mentre si riattiva il valore, il punto decimale viene posizionato nella posizione corretta.
ad es.
1. Per salvare $ 240,10 nel database.
2. Convertirlo in una forma integrale pura: 24010 (si conosce solo lo spostamento dei decimali).
3. Ripristinare lo stato decimale corretto. Posizionare i decimali in 2 posizioni da destra. $ 240,10

Quindi, mentre è in database, sarà in una forma intera rigida.

Problemi correlati