La Web del Programador: Comunidad de Programadores
 
    Pregunta:  2175 - REDONDEAR UN NUMERO EN VB PARA APLICACIONES
Autor:  Xavi
Como puedo redondear un numero en Visual Basic para aplicaciones.
Gracias de antemano.

  Respuesta:  Marco Villacres
El vb tiene una funcion round en donde se pone el numero a redondear y el numero de decimales que quieres que contenga

  Respuesta:  Wirley Rivas Garcia
La Rutina que aqui te coloco redonde en base a 0 y 5
Ejemplo: 114,2 lo lleva a 115, y 117,8 lo lleva a 120

Public Function Redondear(xNum As Currency) As Currency
Dim aux
Dim nUlt
Dim sw As Boolean
Dim i
Dim x
xNum = Int(xNum)
aux = Trim(Str(xNum))
If (xNum > 0) And (Len(aux) > 1) Then
nUlt = Val(Mid(aux, Len(aux), 1))
If (nUlt < 5) And (nUlt > 0) Then
aux = Mid(aux, 1, Len(aux) - 1) & "5"
ElseIf (nUlt > 5) And (nUlt <= 9) Then
aux = Mid(aux, 1, Len(aux) - 1) & "0"
sw = False
i = Len(aux) - 1
Do While (i > 0) And (Not sw)
x = Val(Mid(aux, i, 1))
If x < 9 Then
x = x + 1
aux = Mid(aux, 1, i - 1) & Trim(Str(x)) & Mid(aux, i + 1, Len(aux))
sw = True
ElseIf (x = 9) And (i > 1) Then
aux = Mid(aux, 1, i - 1) & "0" & Mid(aux, i + 1, Len(aux))
i = i - 1
ElseIf (x = 9) And (i = 1) Then
x = x + 1
aux = Mid(aux, 1, i - 1) & Trim(Str(x)) & Mid(aux, i + 1, Len(aux))
i = i - 1
End If
Loop
End If
ElseIf (xNum > 0) And (Len(aux) = 1) Then
aux = IIf(xNum < 6, 5, 10)
End If
Redondear = Val(Trim(aux))
End Function

  Respuesta:  Ces
Utilice la siguiente rutina para redondear un número. Le devolverá el número redondeado en formato Double con tantos decimales como indique en el parámetro ´intCntDec´.
Public Function Redondear (dblnToR As Double,_
Optional intCntDec As Integer) As Double

Dim dblPot As Double
Dim dblF As Double

If dblnToR < 0 Then dblF = -0.5 Else: dblF = 0.5
dblPot = 10 ^ intCntDec
Redondear = Fix(dblnToR * dblPot * (1 + 1E-16) + dblF) / dblPot

End Function

Esta otra función es la que uso yo:
Function Redondeo(i As Variant, Optional n As Variant) As Variant
´realiza el redondeo de la función de manera similar a la función Cnlg
´con la salvedad de que si es .5 lo aproxima al entero superior
´el argumento opcional n determina el nº de decimales sobre los que se va
´a redondear
i = i * 10 ^ n
´control de posibles problemas dedesbordamiento con la función Clng
While i > 2000000000
i = i / 10
n = n - 1
Wend

If i - Fix(i) = 0.5 Then
Redondeo = Fix(i) + 1
Else
Redondeo = CLng(i)
End If

If Not IsMissing(n) Then Redondeo = Redondeo / 10 ^ n
End Function

  Respuesta:  Gregorio Cobá
por si te sirve, te mando un versión de una nueva función para redóndear con visual basic para aplicaciones

Function ARound(valNum As Double, decimals As Integer)

Dim strFormat As String ´ Formato del número

If decimals < 0 Then ´ Si es un valor negativo, lo convierte a positivo para evitar errores
decimals = Abs(decimals)
End If

If decimals > 8 Then ´ Si son mas de 8 decimales lo fija en 8
decimals = 8
End If

If decimals = 0 Then ´ Si no hay decimales, el formato es para un valor entero
strFormat = "#0"
Else
strFormat = "#0." + String(decimals, "0") ´ crea el formato de acuerdo a los decimales
End If

ARound = Val(Format$(valNum, strFormat)) ´ Redondea

End Function

Espero te sirva. Saludos.