J'ai besoin de tronquer le nombre de décimales de ma double valeur pour l'afficher dans une zone de texte. Comment pourrait-on y parvenir avec vba?
Vous pouvez utiliser ROUND
pour FORMAT
dans VBA
Par exemple pour afficher 2 décimales
Dval = 1.56789
Debug.Print Round(dVal,2)
Debug.Print Format(dVal,"0.00")
Remarque: ce qui précède vous donnera 1.57
. Donc, si vous cherchez 1.56
vous pouvez alors stocker le Dval dans une chaîne, puis faire
Dim strVal As String
dVal = 1.56789
strVal = dVal
If InStr(1, strVal, ".") Then
Debug.Print Split(strVal, ".")(0) & "." & Left(Split(strVal, ".")(1), 2)
Else
Debug.Print dVal
End If
Si vous souhaitez arrondir la valeur, vous pouvez utiliser la fonction Arrondir (mais sachez que la fonction Arrondir de VBA utilise l'arrondi de Banker, également connu sous le nom d'arrondi à égal, où il arrondira un 5 vers le haut ou vers le bas; pour arrondir en utilisant l'arrondi traditionnel, utilisez Format).
Si vous souhaitez tronquer la valeur sans arrondir, il n'est pas nécessaire d'utiliser des chaînes comme dans la réponse acceptée - utilisez simplement les mathématiques:
Dim lDecimalPlaces As Long: lDecimalPlaces = 2
Dim dblValue As Double: dblValue = 2.345
Dim lScale = 10 ^ lDecimalPlaces
Dim dblTruncated As Double: dblTruncated = Fix(dblValue * lScale) / lScale
Cela donne "2,34".
Vous pouvez utiliser la fonction Int (). Debug.print Int(1.99543)
Ou mieux:
Public Function Trunc(ByVal value As Double, ByVal num As Integer) As Double
Trunc = Int(value * (10 ^ num)) / (10 ^ num)
End Function
Vous pouvez donc utiliser Trunc(1.99543, 4)
==> result: 1.9954
Histoire tellement amusante. Je jouais avec une fonction de conversion rapide VB. Je veux juste tronquer un double en un entier.
value = Int(83.768)
value == 83
Génial, quelque chose en VB a réellement fonctionné.
Oups, j'ai oublié que cela ne fonctionne pas avec des nombres négatifs
value = Int(-83.768)
value == -84
... ouais c'est juste arrivé. VB utilise l'arrondi bancaire.
Public Function Trunc(ByVal value As Double) As Integer
' Truncate by calling Int on the Absolute value then multiply by the sign of the value.
' Int cannot truncate doubles that are negative
Trunc = (Abs(value) / value) * Int(Abs(value))
End Function
Si vous voulez des décimales spécifiques, faites ce que Makah a fait uniquement avec Abs autour de la valeur pour que Int puisse tronquer correctement.
Public Function Trunc2(ByVal value As Double, Optional ByVal num As Integer = 1) As Double
' Truncate by calling Int on the Absolute value then multiply by the sign of the value.
' Int cannot truncate doubles that are negative
Dim sign As Integer
sign = Abs(value) / value
Trunc2 = sign * (Int(Abs(value) * (10 ^ num)) / (10 ^ num))
End Function