Problema con decimali che non esistono...

di il
6 risposte

Problema con decimali che non esistono...

Ciao a tutti,
sono un novellino,
attualmente utilizzo acces 2007... ebbene si è l'ultima versione che ho a disposizione.

premesse:
il mio db mi serve per fare estrazioni incrociate su una lista di record che rappresentano fatture.
fatture da pagare (segno +); fatture da incassare (segno -).

Importo i dati da csv giornalmente da file estratti direttamente dal sistema contabile.

il mio problema è relativo ai decimali.

ogni singolo record ha al massimo due decimali,(la divisa è l'Euro) ma quando nelle query estraggo i dati usando la funzione somma (esempio raggruppando per cliente) nel campo che accoglie la somma mi trovo una lunga seri di decimali che non ci sono nei dati di partenza. (ogni singola riga non può contenere importo con millesimi o meno al max i centesimi)

Addirittura ho beccato un caso in cui per un cliente avevo solo una fattura ed anche in quel caso mi sono trovato un valore non corrispondente al record originale.

la cosa mi succede sia nel caso che il campo "importo" sia impostato come precisione singola (single) che come doppia (double).

la differenza non è sconvolgente su 72 milioni di totale a parita di righe rispetto alla medesima somma fatta in excel ho una squadratura di 0,24 ma non capisco il perchè. e come contabile questa cosa mi uccide.

non vorrei usare il tipo di dato "decimale" perchè
1) pesa 14byte per cella contro i 4byte del single e gli 8byte del double
( Sto cercando di avere il db più snello possibile - normalmente viaggia a 700 -800 mila righe alla volta)

2) ho letto potrebbe portare ad altri problemi che adesso non ricordo ma in cui non vorrei incappare.

qualcuno ha in mente altre soluzioni?

Grazie mille

Saluti

6 Risposte

  • Re: Problema con decimali che non esistono...

    Devi usare il tipo defimal perché non affetto dal problema del floatingpoint ovvero l'arrotondamento.che avresti con i Double e Single...in caso di calcoli.
    Se non devi fare calcoli puoi usare i single ma niente calcoli altrimenti avresti valori commercialmente parlando errati.
    Questo tuttavia non deve confonderti... con i decimali avrai i calcoli corretti, per i decimali ti basta imporre la visualizzazione dei decimali richiesti...
  • Re: Problema con decimali che non esistono...

    Puoi usare il Currency (Valuta)
  • Re: Problema con decimali che non esistono...

    Ciao Oregon

    il tipo Currency occupa 8byte risparmio spazio rispetto al decimale, che tu sappia posso avere poi problemi strani se dovessi usare altre funzioni oltre alla somma?

    Grazuie
  • Re: Problema con decimali che non esistono...

    Ciao Alex

    quindi o cambio tipo di dato o mi tengo quelle differenze, giusto?

    14byte per record ho paura siano troppi, gia mi scocciava il double e sono passato al single....

    chiederò al capo...

    Grazie
  • Re: Problema con decimali che non esistono...

    Come tinta suggerito Oregon il formato Valuta sicuramente nel tuo caso potrebbe darti entrambe le cose... ma sicuramente non type in floatingpoint quindi no Single e Double...
  • Re: Problema con decimali che non esistono...

    Grazz ha scritto:


    ...
    il tipo Currency occupa 8byte risparmio spazio rispetto al decimale, che tu sappia posso avere poi problemi strani se dovessi usare altre funzioni oltre alla somma?
    NO ....
    Usa currecy (che è un sottoinsieme di decimal), occupi 8 bytes e puoi avere fino a 15 cifre intere e 4 cifre decimali, senza alcun problema di arrotondamento.
    Se hai bisogno di più di 15 cifre intere (milioni di miliardi con l'Euro ??? ma se tornassimo alle Lire magari ci arriveremmo in fretta ) allora DEVI passare a decimal .....
Devi accedere o registrarti per scrivere nel forum
6 risposte