Redondear números
[Función para redondear números a dos decimales]

Fecha: 28-08-2003 a la 1 de la mañana  (28/Ago/2003)
Autor: Fernando "NewHang" Rodriguez


 

Hola a todos. Estaba haciendo yo un programa de gestión para un empresa, y me encontré con un pequeñito problema (debido a mi ignorancia o a no saber buscar bien por la red, vete tu a saber) a la hora de hacer las facturas. Cuando calculaba un IVA me salían tropocientos mil decimales (claro, una división...) ¿Cómo redondeaba yo? Y ahí está el problema. Pues bien, esta es mi solución. Quizás una tontería como la catedral de León (de grande)

Bueno, ya sin mas, aquí el código

Private Function Redondear(ByVal Numero As String) As String
    Dim ParteEntera As String = Int(Numero)
    Dim ParteDecimal As String
    If Not (Len(Numero) - Len(ParteEntera)) = 0 Then
        ParteDecimal = Right(Numero, Len(Numero) - Len(ParteEntera) - 1)
    Else
        ParteDecimal = "00"
    End If
    Dim Num As Double
    If Len(ParteDecimal) >= 3 Then
        ParteDecimal= Left(ParteDecimal, 3)
        If Mid(ParteDecimal, 3, 1) >= "5" Then
            ParteDecimal = Left(ParteDecimal, 2)
            Num = Convert.ToDouble(ParteDecimal)
            Num = Num + 1
            If Len(CStr(Num)) = 3 Then ParteEntera = ParteEntera + 1
            ParteDecimal = Right(CStr(Num), 2)
        End If
    Else
        ParteDecimal = Left(ParteDecimal, 2) '<-- El problema estaba aquí. Si el tercer decimal no
                                             ' empezaba por un numero mayor de 5, saltaba y retornaba
                                             ' el mismo valor de entrada.

    End If
    Redondear = ParteEntera & "," & ParteDecimal
End Function

Espero que os sirva. Yo la utilizo para pasarle números, que me los devuelva redondeados a dos decimales.

Fichero con el código de ejemplo (newHang_redondear.zip - 11.1 KB)


ir al índice