Programación General > Visual Basic para principiantes

 Redondeo Especifico Visual Basic

(1/1)

slowogeid:
Ya avia publicado este tema pero creo que aqui puede que me ayuden mas.

Necesito hacer redondeo de decimales de la siguiente forma:

Si es mayor o igual a 0 y menor o igual a 4, entonces no aumenta el siguiente numero.

Ej. 7.5674 = 7.567

Si es mayor o igual a 6 y menor o igual a 9, entonces aumenta el siguiente numero.

Ej. 7.567 = 7.57

Y si el numero es igual a 5 entonces, si el siguiente numero es par aumenta y si es impar no aumenta.

Ej1. 5.45 = 5.5 ------------> como el 4 es numero Par por lo tanto aumento

Ej2. 5.5 = 5 ------------> como el 5 es impar por lo tanto no aumenta.

Al igual que necesito el poder controlar a cuantos decimales quiero reducir o si quiero llegar hasta el entero.

Por su atencion muchas gracias

Nebire:
Y dónde está el problema ?...

Si ya tienes claro como ha de funcionar el resto es pura matemática. Supongo que sabes sumar y restar... :devil:  :devil:

Te recuerdo que no se hacen tareas, así que si defines cual es el problema o donde tienes dudas se te podrá orientar.

slowogeid:

--- Cita de: "Nebire" ---Y dónde está el problema ?...

Si ya tienes claro como ha de funcionar el resto es pura matemática. Supongo que sabes sumar y restar... :devil:  :devil:

Te recuerdo que no se hacen tareas, así que si defines cual es el problema o donde tienes dudas se te podrá orientar.
--- Fin de la cita ---

Ok Creo que si no lo defini bien donde tengo problema es para que el redondeo se haga con este criterio en cada decimal, y mas que nada en la variante del 5, quiero saber como tomar el digito que se tiene que analizar para ver si es par o no, sin que lo tenga que convertir en caracteres. Y tengo que cumplir con este parametro para que el resultado este bajo el metodo que expuse.

Gracias

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

--- Código: Visual Basic --- 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 Ifend function  
Ejemplos para probarlo...

--- Código: Visual Basic --- 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...

--- Código: Visual Basic --- 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 ?  


--- Código: Visual Basic ---if (X mod n) = 0 then msgbox "Es múltiplo..." 

Navegación

[0] Índice de Mensajes

Ir a la versión completa