Newsgroup: it.comp.appl.access
Titolo: Evitare arrotondamento per eccesso casuale di Access

Ciao a tutti .Volevo un vostro consiglio riguardo un problema vecchio
come la notte dei tempi.Gli arrotondamenti di Access.Per essere
sintetico mi capita a volte anche con semplici operazioni di vedere
che access arrotonda i decimali per eccesso.Esempio.Ho due campi
entrambi con proprieta' "numerico a precisione doppia" e con formato
valuta e posizione decimali  a 2. "Campo 1 * Campo 2 se il risultato
dovrebbe essere 267,69 (come me lo darebbe una normale calcolatrice
scentifica) Access (volte non sempre) mi arrotonda a 267,70.Il
problema e' che lo fa anche con le somme.Sul sito di Karl ho trovato
la funzione che lui ha scritto per questo problema ma non la riesco ad
applicare.ci
 puo' essere un'altra soluzione?????
Di seguito vi riporto il link alla funzione in modo tale che possiate
spiegarmi come applicarla a tutti i campi che utilizzo per svolgere
calcoli.
www.donkarl.com/it?FAQ2.1
Grazie in anticipo
Dino


Ciao Dino,
la pui usare in più modi:
per arrotondare un numero
a= fctRound(2.33453,2)  il ",2" indica il numero di decimali che vuoi,
se non ci metti niente vale 2
a= fctRound(2.333)
oppure per arrondare un calcolo:
a= fctRound(1.11111*2.333,2) con o senza il ",2"
oppure
c=1.11111:d=2.333
a= fctRound(c*d)
Chiaro ?
Ciao
Alberto
fctRound(1.24544,3)

Chiedo scusa, questo in fondo al post non ci azzecca (direbbe Di
Pietro)
fctRound(1.24544,3)
ALberto


Ciao Alberto e grazie per la risposta.Quindi prima (se non erro) creo
un modulo dove imposto la funzione in modo da poterla richiamaree dopo
la posso impostare
così: Es: =fctRound([Prezzo]*[Quantita'];2)
E' corretto????Funziona come una calcolatrice scentifica????
Grazie Dino


Ciao Dino,
metti la definizione della funzione in un modulo globale cosi può
essere utilizzata da in tutti i moduli.
Poi se parliamo di VB fai Es: =fctRound([Prezzo]*[Quantita'],2)
o solo Es: =fctRound([Prezzo]*[Quantita']) se ti vanno bene 2 decimali
se il calcolo lo fai in una casella di testo va bene il ; tra gli
argomenti.
Se non ti trovi la definizione della funzione prelevata dal sito di
Karl, eccola:
Public Function fctRound(varNr As Variant, Optional varPl As Integer =
2) As Double
    If Not IsNumeric(varNr) Then Exit Function
    fctRound = Fix("" & varNr * (10 ^ varPl) + Sgn(varNr) * 0.5) / (10
^ varPl)
End Function
Ciao
Alberto


Grazie Alby per la risposta.Provo e poi ti faccio sapere.
Dino

 - Mostra testo citato -
Ciao Alby sono riuscito finalmente ad effettuare qualche prova.Allora
come prima cosa dopo aver creato un nuovo modulo
ho richiamato la funzione in una query dov avevo impostato dei
calcoli.
Quando lancio la query mi da Overflow " Errore di runtime 6" pur
eseguendo il calcolo.
Da cosa puo' dipendere????Di seguito ti riporto le espressioni:
totnoncod: IIf([Sconto1]>0;(fctRound([Totalenoncod]*[1° Quantita'])*(1-
[Sconto1]/100));fctRound([Totalenoncod]*[1° Quantita'])) "Questo e' un
campo"
Totalecod: IIf([Sconto1]>0;fctRound(([totcomp]*(1-[Sconto1]/100));
[totcomp])) "altro campo"
Altra particolarita' nel modulo appena creato l'ho chiamato
"Arrotonda" ma se lo insrisco con quel nome mi dice funzione non
definita,devo perforza inserire fctround.
Perche' Scusa la doamnda banale??
Grazie in anticipo
Dino


Ciao sono sempre io.
Ho fatto anche questa prova.In un form ho creato due controlli
calcolati dove ho moltiplicato due valori.
nel primo dove ho inserito la funzione di arrotondamento mi arrotonda
per eccesso,mentre nella seconda dove ho svolto semplicemente il
calcolo e' tutto corretto come una calcolatrice scentifica.Es:
=fctround(234,56*456,89) =107168,12 (risultato errato)
=f234,56*456,89=107168,118 risultato corretto
entrambi i controlli hanno come proprieta' "num generico" e posizione
decimali 2
Dino