Retroceder   Foros del Web > Programación para sitios web > .NET

Respuesta
 
Herramientas Desplegado
Antiguo 12-may-2008, 16:20   #1 (permalink)
eljuju ha deshabilitado el karma
 
Fecha de Ingreso: mayo-2008
Mensajes: 2
¿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.
eljuju está desconectado   Responder Citando
Antiguo 12-may-2008, 16:27   #2 (permalink)
Peterpay está en el buen camino
 
Avatar de Peterpay
 
Fecha de Ingreso: septiembre-2007
Ubicación: Mexico
Mensajes: 1.707
Enviar un mensaje por MSN a Peterpay Enviar un mensaje por Skype™ a Peterpay
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
__________________
Saludos
Peterpay
MCPD Enterprise Applications
Peterpay está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 05:45.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93