Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Redondeo hacia arriba

Estas en el tema de Redondeo hacia arriba en el foro de Visual Basic clásico en Foros del Web. Hola a todos, tengo un problema con una variable de tipo single, yo la utilizo para calculo de precio de un producto, pero esta variable ...
  #1 (permalink)  
Antiguo 04/11/2007, 20:14
 
Fecha de Ingreso: febrero-2006
Mensajes: 77
Antigüedad: 18 años, 2 meses
Puntos: 0
Redondeo hacia arriba

Hola a todos, tengo un problema con una variable de tipo single, yo la utilizo para calculo de precio de un producto, pero esta variable me arroja valores con tres o mas digitos despues del punto decimal, para redondear el numero estaba usando el comando round(x,ndec), pero este comando redondea la cifra hacia abajo, si me sale por ejemplo 0.405 me lo deja como 0.4 y yo necesito que redondee la cantidad hacia arriba, ¿Como puedo hacer esto? por favor ayudenme, gracias
  #2 (permalink)  
Antiguo 05/11/2007, 12:09
Avatar de Laforge  
Fecha de Ingreso: noviembre-2004
Ubicación: Galaxia 34, Cuadrante 972, Área 31
Mensajes: 174
Antigüedad: 19 años, 6 meses
Puntos: 2
Re: Redondeo hacia arriba

Buenas,

Antes de nada, quizás deberías plantearte el uso de un tipo Currency en vez de Single para el trabajo 'monetario' ya que un currency te arroja, solamente 4 decimales (y no 8 como el single).

De todas formas, no sé cual es el problema, ya que el redondeo de 0.405 siempre será 0.40 (y no 0.41) .... porqué ???? pues según tengo entendido, son las normas internacionales del redondeo que, aunque en la escuela nos la simplifican no es tal como la enseñan:

valor 0 -> no requiere redondeo -> 0.400 -> 0.40; 0.450 -> 0.45 ,....
valores de 1 a 4 -> redondean para abajo -> 0.401 -> 0.40
valores de 6 a 9 -> redondean para arriba -> 0.406 -> 0.41
y, ahora viene la discordia:
valor 5 ->
si valor a redondear es par -> redondea para abajo -> 0.405 ->0.40
si valor a redondear es impar -> redondea para arriba -> 0.415 -> 0.42

La razón por la que se hace así es para compensar plenamente el valor del redondeo. Ya que 0 (cero) no requiere redondeo, quedan 9 cifras para trasladar el redondeo -> 4 lo hacen para abajo y 4 lo hacen para arriba. Luego nos queda el 5 que 'depende'.
__________________
Nunca esperes un mejor momento para abrir esa botella de vino...........nunca llega.

No hay vida después de MySQL
  #3 (permalink)  
Antiguo 05/11/2007, 16:36
 
Fecha de Ingreso: febrero-2006
Mensajes: 77
Antigüedad: 18 años, 2 meses
Puntos: 0
Re: Redondeo hacia arriba

ha ya, pues ya resolvi el problema creando una pequeña funcion que tiene esta estructura

a = Round(valor, 2)
b = valor
c = b - a
If c >= 0.005 Then
a = a + 0.01
End If
  #4 (permalink)  
Antiguo 06/11/2007, 08:30
Avatar de Laforge  
Fecha de Ingreso: noviembre-2004
Ubicación: Galaxia 34, Cuadrante 972, Área 31
Mensajes: 174
Antigüedad: 19 años, 6 meses
Puntos: 2
Re: Redondeo hacia arriba

...en el fondo era tu única opción ;)
__________________
Nunca esperes un mejor momento para abrir esa botella de vino...........nunca llega.

No hay vida después de MySQL
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 11:04.