Arrondir un nombre à 5 ou 10 près ou à X

Compte tenu des nombres comme 499, 73433, 2348 quel VBA puis-je utiliser pour arrondir à 5 ou 10 près? ou un nombre arbitraire?

Par 5:

499 -> 500 2348 -> 2350 7343 -> 7345 

Vers 10h:

  499 -> 500 2348 -> 2350 7343 -> 7340 

etc.

C’est des maths simples. Avec un nombre X et un facteur d’arrondi N, la formule serait:

rond (X / N) * N

Réponse intégrée

 X = 1234 'number to round N = 5 'rounding factor round(X/N)*N 'result is 1235 

Pour virgule flottante sur entier, de 1234.564 à 1235 (ceci est spécifique à VB, la plupart des autres langages sont simplement tronqués):

 int(1234.564) 'result is 1235 

Attention: VB utilise Bankers Rounding , au nombre pair le plus proche, ce qui peut être surprenant si vous n’en avez pas connaissance:

 msgbox round(1.5) 'result to 2 msgbox round(2.5) 'yes, result to 2 too 

Merci tout le monde.

Arrondir au X le plus proche (sans être spécifique à VBA)

N = X * int (N / X + 0.5)

Où int (…) renvoie le nombre entier inférieur le plus proche.

Si votre fonction d’arrondi disponible arrondit déjà au nombre entier le plus proche, omettez l’ajout de 0,5

Dans VB, math.round a des arguments supplémentaires pour spécifier le nombre de décimales et la méthode d’arrondi. Math.Round (10.665, 2, MidpointRounding.AwayFromZero) renverra 10.67. Si le nombre est un type de données décimal ou unique, math.round renvoie un type de données décimal. S’il est double, il renvoie un type de données double. Cela pourrait être important si l’option ssortingct est activée.

Le résultat de (10.665) .ToSsortingng (“n2”) arrondit à zéro pour donner “10.67”. sans arguments supplémentaires, math.round renvoie 10.66, ce qui pourrait entraîner des divergences indésirables.

‘Exemple: Round 499 à 5. Vous utiliseriez la fonction ROUND ().

 a = inputbox("number to be rounded") b = inputbox("Round to nearest _______ ") strc = Round(A/B) strd = strc*B msgbox( a & ", Rounded to the nearest " & b & ", is" & vbnewline & strd) 

Pour une approche Visual Basic ssortingcte, vous pouvez convertir la valeur à virgule flottante en entier pour arrondir à cet entier. VB est l’un des rares langages qui arrondit la conversion de type (la plupart des autres simplement tronquent).

Des multiples de 5 ou x peuvent être réalisés simplement en divisant avant et en multipliant après le tour.

Si vous voulez arrondir et conserver les décimales, Math.round (n, d) fonctionnerait.

Voici notre solution:

 Public Enum RoundingDirection Nearest Up Down End Enum Public Shared Function GetRoundedNumber(ByVal number As Decimal, ByVal multiplier As Decimal, ByVal direction As RoundingDirection) As Decimal Dim nearestValue As Decimal = (CInt(number / multiplier) * multiplier) Select Case direction Case RoundingDirection.Nearest Return nearestValue Case RoundingDirection.Up If nearestValue >= number Then Return nearestValue Else Return nearestValue + multiplier End If Case RoundingDirection.Down If nearestValue < = number Then Return nearestValue Else Return nearestValue - multiplier End If End Select End Function 

Usage:

 dim decTotal as Decimal = GetRoundedNumber(CDec(499), CDec(0.05), RoundingDirection.Up) 

Simplement ROUND (x / 5) * 5 devrait faire le travail.

Je ne peux pas append de commentaire, donc je vais l’utiliser

dans un vbs exécuter cela et amusez-vous comprendre pourquoi les 2 donnent un résultat de 2

vous ne pouvez pas faire confiance

  msgbox round(1.5) 'result to 2 msgbox round(2.5) 'yes, result to 2 too 

quelque chose comme ca?

 'nearest n = 5 'n = 10 'value v = 496 'v = 499 'v = 2348 'v = 7343 'mod m = (v \ n) * n 'diff between mod and the val i = vm if i >= (n/2) then msgbox m+n else msgbox m end if 

Essayez cette fonction

————–début—————-

 Function Round_Up(ByVal d As Double) As Integer Dim result As Integer result = Math.Round(d) If result >= d Then Round_Up = result Else Round_Up = result + 1 End If End Function 

————-fin ————

Pour imiter dans Visual Basic comme la fonction ronde fonctionne dans Excel, il vous suffit d’utiliser: WorksheetFunction.Round (number, decimals)

De cette façon, l’arrondi bancaire ou comptable ne fait pas l’arrondi.