• Viernes 26 de Abril de 2024, 15:09

Autor Tema:  Redondeo Especifico Visual Basic  (Leído 8168 veces)

slowogeid

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Redondeo Especifico Visual Basic
« en: Jueves 15 de Abril de 2010, 06:20 »
0
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

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Redondeo Especifico Visual Basic
« Respuesta #1 en: Jueves 15 de Abril de 2010, 18:18 »
0
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.
«Ma non troppo»
----> ModoVacaciones = False<----

slowogeid

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Redondeo Especifico Visual Basic
« Respuesta #2 en: Jueves 15 de Abril de 2010, 21:46 »
0
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.

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

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Redondeo Especifico Visual Basic
« Respuesta #3 en: Viernes 16 de Abril de 2010, 17:03 »
0
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
  1.  
  2. Private Function RedondeoDecimal(ByVal n As Single) As Single
  3.     dim c as long, b as byte
  4.  
  5.     c = n * 10000   ' porque necesitamos 4., 10^4
  6.     b = c Mod 10
  7.    
  8.     If b < 5 Then
  9.         RedondeoDecimal = (c - b) / 10000     ' redondeo a la baja, el último decimal pasa a ser 0
  10.     ElseIf b > 5 Then
  11.         RedondeoDecimal = (c + (10 - b)) / 10000  ' redondeo al alza, el último decimal pasa a ser 0
  12.     Else
  13.         RedondeoDecimal = c / 10000  ' sin cambios, no devolvemos n, porque de este modo eliminamos todos los decimales más allá de 4
  14.     End If
  15. end function
  16.  
  17.  

Ejemplos para probarlo...
Código: Visual Basic
  1.  
  2. Dim x As Single, y As Single, z As Single
  3.    
  4.     x = 3.5674
  5.     y = 8.2637
  6.     z = 12.4445
  7.    
  8.     x = RedondeoDecimal(x)
  9.     y = RedondeoDecimal(y)
  10.     z = RedondeoDecimal(z)
  11.  
  12. ' RESULTADOS:
  13.     x = 03.5670        ' redondeado a la baja
  14.     y = 08.2640        ' redondeado al alza
  15.     z = 12.4445        ' sin cambios
  16.  
  17.  

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
  1.  
  2. if x mod 2=0 then
  3.     msgbox "X es par"
  4. else
  5.    msgbox "X es impar"
  6. end if
  7.  
  8.  

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
  1. if (X mod n) = 0 then msgbox "Es múltiplo..."
  2.  
«Ma non troppo»
----> ModoVacaciones = False<----