Ho necessità di arrotondare importi a due cifre decimali in un'applicazione di Access 2010

Anonimo
2013-05-08T15:11:48+00:00

Ho necessità di arrotondare importi a due cifre decimali in un'applicazione di Access 2010

Potrei utilizzare la funzione Round ma nel mio caso non soddisfa la mia esigenza in quanto l'arrotondamento avviene da 0 a 4 in difetto e da 5 in poi in eccesso

A me  serve in difetto da 0 a 5 e in eccesso da 6 in poi.

Per risolvere il problema utilizzo la seguente funzione:

    Function fnc_Arrotonda()

      Dim dbl_Importo As Double

      Dim int_Esponente As Integer

     dbl_Importo = 115.205

     int_Esponente = 2

     fnc_Arrotonda = Int(dbl_Importo * 10 ^ int_Esponente + 0.5) / 10 ^ int_Esponente

    End Function

Il risultato corretto dovrebbe essere 115.21

Invece mi dà 115.20

Il problema si risolve modificando la funzione nel seguente modo:

   Function fnc_Arrotonda()

          Dim dbl_Importo As Double

          Dim int_Esponente As Integer

          dbl_Importo = 115.205

           int_Esponente = 2

          fnc_Arrotonda = dbl_Importo * 10 ^ int_Esponente + 0.5

          fnc_Arrotonda = Int(fnc_Arrotonda) / 10 ^ int_Esponente

End Function

con questa il risultato è corretto: 115.21

Anche se ho risolto il problema vorrei capire il perché.

Faccio presente che la prima delle due procedure in VB6 funziona correttamente.

Grazie infinite.

Ottolini Antonio

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2013-05-08T16:33:56+00:00

Ho necessità di arrotondare importi a due cifre decimali in un'applicazione di Access 2010

Potrei utilizzare la funzione Round ma nel mio caso non soddisfa la mia esigenza in quanto l'arrotondamento avviene da 0 a 4 in difetto e da 5 in poi in eccesso

A me  serve in difetto da 0 a 5 e in eccesso da 6 in poi.

[CUT]

con questa il risultato è corretto: 115.21

Anche se ho risolto il problema vorrei capire il perché.

Faccio presente che la prima delle due procedure in VB6 funziona correttamente.

Grazie infinite.

Ottolini Antonio

Ciao Ottolini Antonio,

forse intendevi che ti serve una funzione che faccia l'arrotondamento commerciale da 0 a 4 in difetto e da 5 a 9 in eccesso.

Comunque non hai risolto, diciamo che per quel particolare numero la tua funzione rende il risultato corretto ma se provi con il valore 151.515 otterrai 151.51 (cifra errata)

il nodo della questione risiede nel tipo di dato Double che per sua natura è approssimato quindi non avrai mai una funzione che si comporti correttamente con tutti i valori passati.

Per avere il risultato corretto bisogna far lavorare la funzione su un tipo di dato non approssimato come ad esempio il Decimal.

Qualche anno fa ho scritto una funzione di arrotondamento, puoi prendere spunto da qui: Funzioni di arrotondamento

Anche in anche in VB6 avevi il problema magari non con il numero 115.205 ma sicuramente con altri, solo che non te ne sei mai accorto.

p.s. la funzione Round di VB6 o di VBA arrotonda secondo il metodo gaussiano e non con il metodo commerciale.

Ciao

Giorgio Rancati

La risposta è stata utile?

0 commenti Nessun commento

0 risposte aggiuntive

Ordina per: Più utili