Bug - Funzione Round Access 2003 VBA

Anonimo
2012-08-21T12:15:39+00:00

Ho osservato che la funzione Round in VBA ritorna valori non coerenti.

Facciamo un esempio: Round(2.5,0) ritorna 2 (!) cioè arrotonda lo 0.5 a 0 ma Round(2.55,1) ritorna 2.6 (corretto!)

0,55 viene arrotondato correttamente a 0,6 alla prima cifra decimale, ma 0,5 viene arrotondato erroneamente a 0, mentre dovrebbe essere portato a 1

Il problema si pone quando devono essere arrotondati i numeri a 0 cifre decimali.

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
2012-08-23T13:42:44+00:00

Diciamo che il Bug c'è e che dovrebbe essere eliminato.

se Round(2.55,1) ritorna 2.6, allora Round(2.5,0) deve ritornare 3 e non 2.

Analogamente, se Round(0.55,1)=0,6 allora Round(0.5,0)=1 e non 0.

La convenzione è che si arrotonda a 1 lo 0.5 anche in contabilità.

Grazie della risposta, la mia era solo una segnalazione.

Ho risolto il problema riscrivendo la funzione round, ciao

Function Round(X As Variant, Optional N As Integer = 0) As Double

Dim I As Double, H As Double, Resto As Double, Res As Double

'Calcola il valore intero che ci interessa

H = X * (10 ^ N)

Resto = H - Fix(H)

Res = Fix(H)

If Abs(Resto) >= 0.5 Then

    Res = Res + Sgn(Resto)

End If

Res = Res / (10 ^ N)

Round = Res

End Function

La risposta è stata utile?

0 commenti Nessun commento

1 risposta aggiuntiva

Ordina per: Più utili
  1. Anonimo
    2012-08-23T13:14:22+00:00

    Ciao Luca,

    in effetti il comportamento di Round è a volte bizzarro vedi anche

    http://msdn.microsoft.com/en-us/library/office/aa188511(v=office.10).aspx

    ma il caso che descrivi non mi sembra strano per "convenzione" fino a 0,5 si arrotonda per difetto  oltre per eccesso...  ma forse è solo una mia convinzione

    La risposta è stata utile?

    0 commenti Nessun commento