Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Problema SUM in access

  1. #1
    Utente bannato
    Registrato dal
    Sep 2001
    Messaggi
    534

    Problema SUM in access

    Ho creato una tabella con un campo numerico (precisione doppia) chiamato importo. Ci metto questi 3 valori:
    379.3
    -189.64
    -189.66
    La somma ovviamente da zero.
    Faccio questa query:

    SELECT Sum(tabella.importo) AS SommaDiimporto FROM tabella;


    La query mi dovreve dare zero ma invece mi da

    2,8421709430404E-14

    ora mi chiedo perchè?????


  2. #2
    Utente di HTML.it L'avatar di Misterxxx
    Registrato dal
    Oct 2003
    Messaggi
    3,706
    La memorizzazione in precisione doppia è molto 'sensibile' (e scorretta!) per cui in una somma algebrica di tali valori si trovano remoti decimali.
    2,8421709430404E-14
    è infatti un numero decimale negativo infinitamente piccolo.
    Per risolvere devi usare:
    codice:
    SELECT int(Sum(tabella.importo)*100)/100 AS SommaDiimporto FROM tabella;
    per eliminare residui decimali remoti.
    Userai 1000 al posto di 100 se vorrai 3 decimali invece di 2 e così via.

  3. #3
    Utente bannato
    Registrato dal
    Sep 2001
    Messaggi
    534
    in effetti questo sql funziona bene e mi fa vedere zero come somma..
    questo rislve il mio problema ma mi rimane sempre il dubbio.
    Perchè se io scrivo dentro access quei valori lui mi dovrebbe memorizzare dei decimali in fondo che ovviamente con le somme (differenze) danno questi problemi?

    Oppure perchè access, quando apro la tabella, mi fa vedere solo 379.3 e non 379.300000000000000000012 per dire???

    è un bug del motore di access?

  4. #4
    Utente di HTML.it L'avatar di Misterxxx
    Registrato dal
    Oct 2003
    Messaggi
    3,706
    Originariamente inviato da zaratustra
    in effetti questo sql funziona bene e mi fa vedere zero come somma..
    questo rislve il mio problema ma mi rimane sempre il dubbio.
    Perchè se io scrivo dentro access quei valori lui mi dovrebbe memorizzare dei decimali in fondo che ovviamente con le somme (differenze) danno questi problemi?

    Oppure perchè access, quando apro la tabella, mi fa vedere solo 379.3 e non 379.300000000000000000012 per dire???

    è un bug del motore di access?
    Sicuramente è un bug.

  5. #5
    Utente bannato
    Registrato dal
    Sep 2001
    Messaggi
    534
    mi pare di aver risolto facendo cosi..
    creo una prima quesry chemi legge la tab e la converte in questo modo

    SELECT Round(CCur(tab.importo),2) AS Importo FROM tab

    poi faccio la query solita con la somma e funziona...

    praticamente converto la double in currency e con la round arrotondo...pare andare bene...poi controllo gli arrtondamenti

  6. #6
    Utente di HTML.it L'avatar di Misterxxx
    Registrato dal
    Oct 2003
    Messaggi
    3,706
    Noto il prb, i metodi che risolvono la questione posso essere diversi, come hai appena dimostrato.

  7. #7
    Utente bannato
    Registrato dal
    Sep 2001
    Messaggi
    534
    funziona bene con access 2003 e un db in formato 97. Ma se si apre lo stesso archvio con access 97 non funziona...

    che fregatura!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.