C'est évident si on considère le nombre de messages dans les groupes de
discussion, lorsque vient le temps d'arrondir une expression, en VBA, quelques
erreurs se produisent. La principale raison de ces erreurs provient que le
type Single ou le type Double ne peuvent parfois pas être représentés
correctement, en format binaire, produisant ainsi des erreurs d'inexactitude
de représentation.
Une façon de contourner le problème est d'utiliser un type de données
entier avec facteur d'échelle, tel que les types Currency (monnaie) et
Decimal (décimal). Voici une fonction qui arrondi toujours correctement, en
utilisant les arrondis de banquiers, en convertissant les arguments en un type
décimal.
Public Function Round( _
ByVal Number As Variant, NumDigits As Long, _
Optional UseBankersRounding As Boolean = False) As Double
Dim dblPower As Double
Dim varTemp As Variant
Dim intSgn As Integer
If Not IsNumeric(Number) Then
Err.Raise 5
End If
dblPower = 10 ^ NumDigits
intSgn = Sgn(Number)
Number = Abs(Number)
varTemp = CDec(Number) * dblPower + 0.5
If UseBankersRounding Then
If Int(varTemp) = varTemp Then
If varTemp Mod 2 = 1 Then
varTemp = varTemp - 1
End If
End If
End If
Round = intSgn * Int(varTemp) / dblPower
End Function
' ********** Code End **************