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. |