De entrada, el planteamiento del redondeo lo veo incorrecto. Naturalmente esto es relativo y sólo será cierto según para qué lo necesites.
Te razono la afirmación:
Si tenemos dos valores X e Y y sean estos valores los siguientes:
x= 7.5674
Y= 7.56
Tu obtienes que X redondeando será: 7.567, en cambio Y redondeado será 7.57, usando el criterio que expresaste. Comparemos con el valor original:
para X: 7.5674 - 7.567= 0.0004
para Y: 7.56 - 7.57= -0.0100
Es decir Y tiene un redondeo 25 veces mayor que X.
¿Esto que quiere decir?, que el redondeo se debe aplicar exclusivamente el eneavo decimal, exclusivamente, por tanto
Y no debe considerarse como 7.56 sino como 7.560
Resumiendo debes ponerte de acuerdo en cuantos decimales quieres apreciar y ese valor tiene que ser el mismo para todas las cifras.
Consideremos que deseas reconocer hasta 4 decimales...
Private Function RedondeoDecimal(ByVal n As Single) As Single
dim c as long, b as byte
c = n * 10000 ' porque necesitamos 4., 10^4
b = c Mod 10
If b < 5 Then
RedondeoDecimal = (c - b) / 10000 ' redondeo a la baja, el último decimal pasa a ser 0
ElseIf b > 5 Then
RedondeoDecimal = (c + (10 - b)) / 10000 ' redondeo al alza, el último decimal pasa a ser 0
Else
RedondeoDecimal = c / 10000 ' sin cambios, no devolvemos n, porque de este modo eliminamos todos los decimales más allá de 4
End If
end function
Ejemplos para probarlo...
Dim x As Single, y As Single, z As Single
x = 3.5674
y = 8.2637
z = 12.4445
x = RedondeoDecimal(x)
y = RedondeoDecimal(y)
z = RedondeoDecimal(z)
' RESULTADOS:
x = 03.5670 ' redondeado a la baja
y = 08.2640 ' redondeado al alza
z = 12.4445 ' sin cambios
Ya lo tienes resuelto...
Dejo a tu esfuerzo cómo resolver, cuando un valor es tan grande que al multiplicarlo por 10.000 produce desbordamiento....
p.d.: la paridad se comprueba hayando el resto de una división entre 2, si sobra 0 es par, si sobra 1 es impar...
if x mod 2=0 then
msgbox "X es par"
else
msgbox "X es impar"
end if
Lo mismo para cualquier base numércia, es múltiplo de 3 ? ( x mod 3)
Es x múltiplo de n ?
if (X mod n) = 0 then msgbox "Es múltiplo..."