elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  pero como le asigno un valor monetario a una hora
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: pero como le asigno un valor monetario a una hora  (Leído 6,305 veces)
Lekim

Desconectado Desconectado

Mensajes: 268



Ver Perfil
Re: pero como le asigno un valor monetario a una hora
« Respuesta #10 en: 9 Febrero 2016, 08:50 am »

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
  1. Public Class Form1
  2.  
  3.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  4.        Dim Entrada As DateTime
  5.        Dim Salida As DateTime
  6.  
  7.        DateTime.TryParse("12:00", Entrada)
  8.        DateTime.TryParse("14:15", Salida)
  9.  
  10.        'Obtiene el total de minutos
  11.        Dim TotalMinutos As Integer = CInt(Salida.Subtract(Entrada).TotalMinutes)
  12.  
  13.        Dim Horas As Integer = CInt(Math.Truncate(TotalMinutos / 60))
  14.        Dim Cuartos As Integer = CInt(Math.Truncate((TotalMinutos - (Horas * 60)) / 15))
  15.        Dim Precio As Integer = (Horas * 500) + (Cuartos * 150)
  16.        MsgBox(Precio)
  17.  
  18.        'Info: Math.Truncate elimna los decimales. De modo que:
  19.        'Si Cuartos = 0.7333 (11 min) devuelve 0
  20.        'Si Cuartos = 1.13 (17 min) devuelve 1
  21.        'Si Cuartos = 2 (30 min) devuleve 2
  22.    End Sub
  23. End Class

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

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

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
  1. Public Class Form1
  2.  
  3.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  4.        Dim Entrada As DateTime
  5.        Dim Salida As DateTime
  6.  
  7.        DateTime.TryParse("12:30", Entrada)
  8.        DateTime.TryParse("14:35", Salida)
  9.  
  10.        'Obtiene el total de minutos
  11.        Dim TotalMinutos As Integer = CInt(Salida.Subtract(Entrada).TotalMinutes)
  12.  
  13.        Dim Cuartos As Integer, Horas As Integer, Precio As Integer
  14.        If TotalMinutos < 60 Or TotalMinutos = 60 Then
  15.            Precio = 500
  16.        Else
  17.            Horas = CInt(Math.Truncate(TotalMinutos / 60))
  18.            Cuartos = CInt(Math.Truncate((TotalMinutos - (Horas * 60)) / 15))
  19.            Precio = (Horas * 500) + (Cuartos * 150)
  20.        End If
  21.        MsgBox(Precio)
  22.  
  23.    End Sub
  24. End Class

Sl2s




« Última modificación: 9 Febrero 2016, 13:15 pm por Lekim » En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines