![]() |
¿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. |
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 |
| La zona horaria es GMT -6. Ahora son las 19:10. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.