funciona pero tiene un error si la entrada es a las 12:00 y sale 14:15 $ 1250
deberia cobrar 1150
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...
Código
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
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
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