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
Ir a la versión completa