Newsgroup: it.comp.appl.access
Titolo: [OT] Traduzione FAQ 2.1

2.1 ARROTONDAMENTI
Problema
Non trovi funzioni per l'arrotondamento commerciale.
Tentando con le funzioni INT e FIX riscontri errori ed imprecisioni. CDbl()
e CInt() non fanno arrotondamenti commerciali ma matematici, cioè sul 5
all'intero più vicino. Lo stesso vale per la nuova funzione VBA inserita da
A00 Round, che dà risultati tipo Round(1.085,2) 1.08
vedi anche   
http://support.microsoft.com/support/kb/articles/Q225/3/30.ASP
o
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q196652
Anche tutte le varianti cosiddette alternative tramite funzioni Format
arrotondano in modo inaffidabile.
Cause
I calcoli con virgola mobile in generale e i tipi di dati di Access sono
imprecisi.
Access stranamente non ha inclusa alcuna funzione di arrotondamento
commerciale.
Soluzione
Si deve costruirsi da sè una funzione interna ad Access.
La più breve e sufficientemente precisa a me nota è:
Function fctRound(Optional varNr, Optional varPl As Integer = 2) As Double
 ' by Konrad Marfurt + ? + Karl Donaubauer
    ' esce qualora senza valore o con valore non numerico
    If IsMissing(varNr) Or Not IsNumeric(varNr) Then Exit Function
    fctRound = Fix("" & varNr * (10 ^ varPl) + Sgn(varNr) * 0.5) / (10 ^
varPl)
End Function
Note:
E' predefinito l'arrotondamento a due cifre qualora l'argomento non venga
passato. (vedi esempio 1)
es1: fctRound(1.025) --> 1.03
es2: fctRound(1.25,1) --> 1.3
es3: fctRound(1250, -2) --> 1300
La stringa vuota "" nella funzione non è un errore ma un trucco per la
precisione.
Un'altra possibilità per l'arrotondamento commerciale è:
Qualora sia disponibile Excel, la funzione Round (che non è uguale a quella
di VBA). Descrizione di Gunther Ritter:
Usare un modulo e sotto Strumenti/Riferimenti attivare EXCEL8.0 Library.
Esempio di funzione di arrotondamento:
Function CifraArr(a,b)
CifraArrl=Excel.Application.Round(a, b)
End Function
Noch ein Hinweis zur Fünfer-Rundung, z.B. bei der schweizer
5-Rappen-Geschichte auf 0,00/0,05. Man kann dazu die o.a. Rundungsfunktion
jedesmal oder in eine eigene Prozedur gekleidet wie folgt aufrufen:
....
Ancora un consiglio per.........????????????? (ndr. Karl dimmi cos'è perchè
non ne ho la più pallida idea)
fctRound((CifraoNomeCampo * 20), 0) / 20
-------------
Ciao Valerio

 
http://support.microsoft.com/support/kb/articles/Q225/3/30.ASP
VB e VBA danno luogo - soprattutto in Floating Point - a degli
errori di calcolo che sono semplicemente assurdi.
Microsoft, coerentemente con tali assurdità, propone rimedi come
quello sopra indicato.
L'unico rimedio è lavorare in Currency in luogo di Floating Point.
In tale modalità non ho mai riscontrato errori.
Nel caso di specie, laddove poi Round(1.085,2) = 1.08 non può
considerarsi errore, introducendo Currency si ha:
Round(Format(1.085, "Currency"), 2) = 1.09

 -------------
In Svizzera arrotondono quasi tutti i prezzi a 5 Rappen
(Rappen = i centesimi della valuta SFR) per evitare le monete
piccolissime.
Per questo nei NG tedeschi spesso viene la domanda come
si puo arrotondare in un modo che p.e. da un prezzo come
5,42 --> 5,4 o 5,46 --> 5,45 o 5,48 --> 5,5 ecc.
Č piů chiaro adesso?
--
cu
Karl
*********
Access FAQ: 
www.donkarl.com/it

 ha scritto nel messaggio
news:2ppm17F...@uni-berlin.de...

Ancora un consiglio per l'arrotondamento al 5, come per gli svizzeri che per
evitare monetine piccole arrotondano ai 5 centesimi, cioč 0,00/0,05. Potete
usare, o richiamare se create una procedura apposita, la seguente funzione:
fctRound((CifraoNomeCampo * 20), 0) / 20
------------
Ciao Valerio.

 ...
Ho cambiato qualche parte del articolo e della traduzione.
P.f. controllate il risultato se tutto è chiaro e ancora italiano.



S o l u z i o n i
Devi costruirti da solo una funzione. La piů breve
e sufficientemente precisa a me nota č:
 come per gli svizzeri che per evitare monetine
piccole arrotondano
nota di stile:
Gli svizzeri, per evitare monete piccole,
arrotondano ai 5 centesimi (0,00/0,05).
Per questo scopo si puň chiamare la funzione
descritta sopra
ciao MAssimiliano