Foros del Web » Programación para mayores de 30 ;) » .NET »

¿Donde está el error?

Estas en el tema de ¿Donde está el error? en el foro de .NET en Foros del Web. Function Incremento(ByVal Cuota As Double, ByVal Inc As Integer) As Double If Inc > 0 Then If Cuota < 2 Then Incremento = Incremento(Cuota + ...
  #1 (permalink)  
Antiguo 12/05/2008, 16:20
 
Fecha de Ingreso: mayo-2008
Mensajes: 4
Antigüedad: 16 años
Puntos: 0
¿Donde está el error?

Function Incremento(ByVal Cuota As Double, ByVal Inc As Integer) As Double
If Inc > 0 Then
If Cuota < 2 Then
Incremento = Incremento(Cuota + 0.01, Inc - 1)
ElseIf Cuota < 3 Then
Incremento = Incremento(Cuota + 0.02, Inc - 1)
ElseIf Cuota < 4 Then
Incremento = Incremento(Cuota + 0.05, Inc - 1)
ElseIf Cuota < 6 Then
Incremento = Incremento(Cuota + 0.1, Inc - 1)
ElseIf Cuota < 10 Then
Incremento = Incremento(Cuota + 0.2, Inc - 1)
ElseIf Cuota < 20 Then
Incremento = Incremento(Cuota + 0.5, Inc - 1)
ElseIf Cuota < 30 Then
Incremento = Incremento(Cuota + 1, Inc - 1)
ElseIf Cuota < 50 Then
Incremento = Incremento(Cuota + 2, Inc - 1)
ElseIf Cuota < 100 Then
Incremento = Incremento(Cuota + 5, Inc - 1)
ElseIf Cuota < 1000 Then
Incremento = Incremento(Cuota + 10, Inc - 1)
Else: Incremento = 1000
End If
End If
If Inc = 0 Then
Incremento = Cuota
End If
End Function

La funcion lo q hace es calcular el valor resultante de incrementar un valor pero teniendo en cuenta q el incremento es distinto según el tramo:
De 1,01 a 2 incremento de 0,01
De 2 a 3 incremento de 0.02
De 3 a 4 incremento de 0.05
De 4 a 6 incremento de 0.1
De 6 a 10 incremento de 0.2
De 10 a 20 incremento de 0.5
De 20 a 30 incremento de 1
De 30 a 50 incremento de 2
De 50 a 100 incremento de 5
y de 100 a 1000 incremento de 10 en 10.

P.ej.: Incremento(1,01;1) daría como resultado 1,02
.............
Incremento(1,01;98)= 1,99
Incremento(1,01;99) = 2
Incremento(1,01;100)= 2,02
.............
Incremento(1,01;148)= 2,98
Incremento(1,01;149)= 3
Incremento(1,01;150)= 3,05
...............
Incremento(1,01;168)= 3,95
Incremento(1,01;169)= 4

hasta aqui todo bien, pero resulta q si hago

Incremento(1,01;170) da como resultado 4,05 en vez de dar 4,10
de hecho si hago Incremento(4;1)=4,10 o
Incremento(3,95;2) = 4,10

Increible pero cierto!! Yo creo q es algo relativo a los tipos de datos pero ni idea, y cuanto más lo miro menos lo entiendo, si alguien lo ve, q me conteste.
He realizado la ejecucion paso a paso y aun he flipado más cuando he visto q la variable Cuota segun el depurador tenía un valor = 4 y sin embargo entraba por la comparativa "menor que 4"; increible pero cierto.
Perdonad por el tocho y gracias de antemano.
  #2 (permalink)  
Antiguo 12/05/2008, 16:27
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Re: ¿Donde está el error?

pues el problema esta con tu logica tu solo dices q deben estar en el rango

y tienes rangos encimados

si dices si 1.1<cuota <2 =0.01 expresalo asi

if cuota >1.1 AND couta<2
incremento =0.01;

si lo haces como arriba estas tomando el ultimo valor q se cumpla encadenando los anteriores, debuggealo con el valos de 1 y ve q sucede
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
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




La zona horaria es GMT -6. Ahora son las 22:02.