Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Evitare arrotondamento per eccesso casuale di Access

1,107 views
Skip to first unread message

Dino

unread,
Feb 14, 2010, 6:38:14 AM2/14/10
to
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

almorel

unread,
Feb 14, 2010, 7:31:07 AM2/14/10
to


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)

almorel

unread,
Feb 14, 2010, 7:35:07 AM2/14/10
to
Chiedo scusa, questo in fondo al post non ci azzecca (direbbe Di
Pietro)
fctRound(1.24544,3)

ALberto

Dino

unread,
Feb 14, 2010, 11:22:14 AM2/14/10
to

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

almorel

unread,
Feb 14, 2010, 2:06:46 PM2/14/10
to

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

Dino

unread,
Feb 15, 2010, 8:31:29 AM2/15/10
to

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

Dino

unread,
Feb 16, 2010, 2:10:41 PM2/16/10
to
> Dino- Nascondi testo citato
>
> - 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

Dino

unread,
Feb 16, 2010, 2:24:09 PM2/16/10
to

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

0 new messages