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)