Visual Basic para Aplicaciones - ¿Donde esta el error?

Life is soft - evento anual de software empresarial
 
Vista:

¿Donde esta el error?

Publicado por Centolo (1 intervención) el 13/05/2008 00:13:45
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.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:¿Donde esta el error?

Publicado por pablo (48 intervenciones) el 13/05/2008 11:25:35
El primer problema que salta a la vista es que vos estas haciendo intervalos de
[0,01:2) un valor de [2:3] otro pero si te pones a ver cuando pones la condicion de cuota < 3 ya estas incluyendo todo numero que sea menor que 3 y me refiero a 0,001, etc de ahi vas a encontrar un conflicto entre la condicion cuota <2 y cuota <3. Espero que hayas entendido el problema o que yo haya entendido lo que querias hacer.
saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿Donde esta el error?

Publicado por JuanC (243 intervenciones) el 13/05/2008 16:21:28
Probá con estos cambios

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

If Inc = 0 Then
Incremento = Cuota
End If

Saludos desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar