pero como le asigno un valor monetario a una hora

Iniciado por djnilo, 5 Febrero 2016, 01:50 AM

0 Miembros y 1 Visitante están viendo este tema.

Lekim

#10
Cita de: djnilo en  8 Febrero 2016, 22:38 PM
funciona pero tiene un error si la entrada es  a las 12:00 y sale 14:15 $ 1250
deberia cobrar 1150


Entiendo el error pero antes de reparar el error déjame aclarar unos puntos.

Basándome en las condiciones que tú mismo establecistes...
1ª hora  = 500$
A partir de la hora cada cuarto de hora se cobran 150$

Las condiciones que tú realmente expones son:
Cada hora completa son 500$
Cada cuarto de hora extra son 150$


Por ejemplo si son 2 h y 15 minutos  son 500 + 500 +150 = 1150

Aclarado el asunto, vamos por faena...  ;D

Código (vbnet) [Seleccionar]

Public Class Form1

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Dim Entrada As DateTime
       Dim Salida As DateTime

       DateTime.TryParse("12:00", Entrada)
       DateTime.TryParse("14:15", Salida)

       'Obtiene el total de minutos
       Dim TotalMinutos As Integer = CInt(Salida.Subtract(Entrada).TotalMinutes)

       Dim Horas As Integer = CInt(Math.Truncate(TotalMinutos / 60))
       Dim Cuartos As Integer = CInt(Math.Truncate((TotalMinutos - (Horas * 60)) / 15))
       Dim Precio As Integer = (Horas * 500) + (Cuartos * 150)
       MsgBox(Precio)

       'Info: Math.Truncate elimna los decimales. De modo que:
       'Si Cuartos = 0.7333 (11 min) devuelve 0
       'Si Cuartos = 1.13 (17 min) devuelve 1
       'Si Cuartos = 2 (30 min) devuleve 2
   End Sub
End Class


Y si lo prefieres, puedes poner la operación matemática todo en una línea:

Código (vbnet) [Seleccionar]

        Dim TMin As Integer = CInt(Salida.Subtract(Entrada).TotalMinutes)
       Dim Precio As Integer = (CInt(Math.Truncate(TMin / 60)) * 500) + (CInt(Math.Truncate((TMin - (CInt(TMin / 60) * 60)) / 15)) * 150)


El sistema es simple.
Cuento las horas --> H=Minutos /60
Cuento los Cuartos --> C = (Minutos - H * 60) / 15  --( sin decimales)
Calculo el precio ---> Precio = (H * 500) + C * 150

Pero ¿Qué ocurre si es menos de una hora? entonces hay que establecer condiciones? Como se hizo anteriormente.

Código (vbnet) [Seleccionar]

Public Class Form1

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Dim Entrada As DateTime
       Dim Salida As DateTime

       DateTime.TryParse("12:30", Entrada)
       DateTime.TryParse("14:35", Salida)

       'Obtiene el total de minutos
       Dim TotalMinutos As Integer = CInt(Salida.Subtract(Entrada).TotalMinutes)

       Dim Cuartos As Integer, Horas As Integer, Precio As Integer
       If TotalMinutos < 60 Or TotalMinutos = 60 Then
           Precio = 500
       Else
           Horas = CInt(Math.Truncate(TotalMinutos / 60))
           Cuartos = CInt(Math.Truncate((TotalMinutos - (Horas * 60)) / 15))
           Precio = (Horas * 500) + (Cuartos * 150)
       End If
       MsgBox(Precio)

   End Sub
End Class


Sl2s