Newsgroup: it.comp.appl.access
Titolo: Problema di visualizzazione somma in un report

Buongiorno A2000
Ho una tabella tVersamenti con i seguenti campi:
Rimborso: Numerico, Precisione doppia, standard, 2 dec.
CompNette: Numerico, Precisione doppia, standard, 2 dec.
AssFam: Numerico, Precisione doppia, standard, 2 dec.
Saldo: Numerico, Precisione doppia, standard, 2 dec.
FondoDisp: Numerico, Precisione doppia, standard, 2 dec.
Ho creato un report associato ad una query che preleva
i dati dalla tabella tVersamenti.
Ho inserito per ogni campo il relativo totale, però
Access visualizza un centesimo in meno rispetto al
totale della somma del campo.
Faccio un esempio:
FondoDisp
  254.29
  231.35
  175.12
  ------
  660.76 (totale calcolato con super calcolatrice tascabile) :-)
Il sig. Access mi visualizza 660.75
Perchè succede questo?
Ho anche provato ad impostare il formato Valuta sia nella
struttura tabella che nel report, ma il risultato non cambia...
Vi prego aiutatemi
Ciao Alessandra
--------------------------------
Inviato via 
http://usenet.libero.it

 Inviato via 
http://usenet.libero.it
Ciao Alessandra, controlla il contenuto dei campi alla massima precisione (8
o piů decimali ) ti accorgerai che non sono come li vedi rappresentati nel
report. il problema sta a monte ovvero quando esegui i calcoli devi
arrotondare al numero di decimali desiderati per non trovare queste sorprese
in futuro.
Ciao Giorgio.

 FondoDisp: Numerico, Precisione doppia, standard, 2 dec.
Interessante, immagino che il mio post di prima sia tranquillamente inutile,
mmhhh...
Ciao, Alessandro


A naso secondo me il campo FondoDisp nella tabella contiene degli importi a
4 cifre decimali, nel senso che esistono degli importi dove la 3a e la 4a
cifra decimale non sono nulli. Se nel tuo report i singoli valori li porti
fuori arrotondati alla 2a cifra e il totale invece lo fai sommando i valori
"nativi", allora, ed č giusto che sia cosě, si puň verificare quella
discrepanza. Il totale lo dovresti costruire come somma dei valori
arrotondati e non come arrotondamento della somma dei valori "nativi".
Oppure, che č la cosa migliore, fai in modo che gli importi siano
memorizzati nella tabella sempre con solo 2 cifre decimali significative.
Ciao, Alessandro


Devi arrotondare i numeri alla seconda cifra decimale, tramite una funzione
che trovi sul sito comune.
Non utilizzare la funzione Round di VBA poichè "sbaglia" le approssimazioni.
Comunque sta storia della Round è scandalosa poichè la M$ non ha creato una
funzione per le approssimazioni che opera come ci si aspetterebbe.
Una curiosità a che diavolo serve la Round approssimando in quel modo?
Antonio.


Una mia teoria: La funzione round lavora con il tipo di dato DOUBLE e quindi
la precisione è limitata dal metodo binario, a naso quando MS implementerà
(in VBA) il tipo di dato decimal verrà sistemata anche la funzione round
(forse). In ogni caso basta abbandonare il tipo di dato double per passare
al tipo variant  con sottotipo decimal per costruirsi funzioni di
arrotondamento appropriate ad alta precisione .
Vedremo in seguito.
Ciao Giorgio.


Scusate il ritardo, ma non posso stare collegata ad internet sempre, vado al
lavoro!!!
Siccome ho anche Access97, ho provato a creare la stessa tabella come in
Access 2000, ho creato il report associato e... sosrpresa... i conti
tornano!!!
Pensavo allora di creare il database con Access97 e poi convertirlo in
Access2000
Cosa ne pensate?
Ciao Alessandra
PS sto andando al lavoro ci sentiamo domani, grazie!!!!


 Cosa ne pensate?
Nooooo.. non farloooooooo!!!!!!!
Antonio

 Cosa ne pensate?
Non si può dire.. ;-)
Comunque,  se definisci nella struttura della tabella il campo FondoDisp
come di tipo valuta con _2 cifre decimali_, non può che funzionare: gli
importi verranno memorizzati sempre e soltanto con 2 cifre
significative e di conseguenza il totale visualizzato nel report sarà sempre
corretto.
Ciao, Alessandro

 Rieccomi... Alessandro
Nella tabella tVersamenti ho impostato il formato a Valuta
formato Standard con due decimali... ai campi FondoDisp, FondoVinc... ecc.
come mi avevi consigliato.
Nella maschera di inserimento dati ho digitato il codice che vedi qui sotto,
utilizzando la funzione Int() per arrotondare i decimali... e ora funziona
tutto a dovere!!
Private Sub DataReg_GotFocus()
Me.Saldo = Me.CompNette - Me.AssFam
If Me.PosGiuridica = "S" Then
    Me.FondoDisp = Int((Me.Saldo * 1.8) - Me.Saldo)
    Me.FondoVinc = (Int(Me.Saldo * 1.2) - Me.Saldo)
    Me.QuotaMantenim = Me.GiorniMese * 0.36
    Me.FondoDisp = Int(Me.FondoDisp - Me.QuotaMantenim - Me.Rimborso)
End If
If Me.PosGiuridica = "A" Then
    Me.FondoDisp = Int((Me.Saldo * 1.8) - Me.Saldo)
    Me.FondoVinc = Int((Me.Saldo * 1.2) - Me.Saldo)
    Me.QuotaMantenim = 0
    Me.FondoDisp = Int(Me.FondoDisp - Me.Rimborso)
End If
If Me.PosGiuridica = "R" Then
    Me.FondoDisp = Me.Saldo
    Me.FondoVinc = 0
    Me.QuotaMantenim = 0
    Me.FondoDisp = Me.FondoDisp - Me.Rimborso
End If
End Sub
Grazie a tutti, e specialmente ad Alessandro per il consiglio datomi.
Ciao Alessandra.
