Funzioni di arrotondamento PDF Stampa E-mail
Scritto da Giorgio Rancati   
Sabato 24 Novembre 2007 01:00

Le funzioni che seguono vanno memorizzate in un modulo Bas di Access, poi si possono richiamare in una query, nell’origine controllo di una casella testo, da un altro modulo Bas o di classe, ecc.

 

Arrotonda rende un numero arrotondato al numero di decimali desiderato secondo il metodo commerciale.

Arrotonda_Eccesso rende un numero arrotondato per eccesso al multiplo più vicino al peso

 

Entrambe le funzioni utilizzano il tipo di dato Decimal che non essendo approssimato come Double e Single ed avendo la precedenza su tutti gli altri tipi ci garantisce un risultato corretto.

Public Function Arrotonda(ByVal Numero As Variant, _
                    Optional ByVal Decimali As Variant = 2) As Variant

  'Numero =Numero in ingresso
  'Decimali=Decimali desiderati
  Dim result As Variant 'Risultato
  Dim Nr As Variant     'Numero da trattare
  Dim Dec As Integer    'Numero decimali

  Dec = Decimali
  'Controllo massimo numero di decimali
  If Dec > 10 Then Dec = 10
  'Converto il numero in ingresso nel tipo decimal
  Nr = CDec(Nz(Numero, 0))
  'Tolgo l'eventuale segno negativo
  Nr = Abs(Nr)
  'Arrotondo
  result = Nr * 10 ^ Dec + 0.5
  result = Fix(result) / 10 ^ Dec
  'Riassegno l'eventuale segno negativo e rendo il risultato
  Arrotonda = result * Sgn(Nz(Numero, 0))
End Function
'Rende la cifra arrotondata per eccesso al multiplo più vicino al peso.
Public Function Arrotonda_Eccesso(ByVal Numero As Variant, _
                    Optional ByVal Peso As Variant = 0.01) As Variant
  
  'Numero =Numero in ingresso
  'Peso = scaglione d'arrotondamento
  Dim result As Variant 'Risultato
  Dim Nr As Variant     'Numero da trattare

  'Converto il numero in ingresso nel tipo decimal
  Nr = CDec(Nz(Numero, 0))
  'Tolgo l'eventuale segno negativo
  Nr = Abs(Nr)
 'Arrotondo
  result = Nr / Peso + 0.99999
  result = Fix(result) * Peso
 'Riassegno l'eventuale segno negativo e rendo il risultato
  Arrotonda_Eccesso = result * Sgn(Nz(Numero, 0))
End Function

 

Esempio di utilizzo:

In finestra immediata

?Arrotonda(0.005,2)

Risultato: 0,01

?Arrotonda_Eccesso(12,5)

Risultato: 15

 


Sistema operativo: WIN32
Applicazioni: Access 97, Access 2000, Access 2002/XP, Access 2003, Access 2007

 

Ultimo aggiornamento Giovedì 02 Luglio 2009 13:37