Separar decimal

Tengo el mismo problema y yo estoy programando en visual .net 2003.. Ayuda..
Hola mi pregunta es la siguiente. Estoy desarrollando una aplicación para saber las horas de entradas y salidas del personal de mi empresa, el problema es que las checadas (entrada o salida), están expresadas en minutos y al convertirlas a horas (dividir entre 60) me da un numero decimal, el cual necesito separar para miltiplicar nuevamente el decimal y sacar los minutos reales. Como puedo separar un numero entero y su decimal. Por ejemplo de 15.94

1 Respuesta

Respuesta
1
Podrías convertir a cadena ese número, y utilizar "Instr" para obtener la posición del punto decimal y ya entonces separarlo.
El siguiente ejemplo es una función que recibe una cadena de texto y regresa otra cadena que representa el número que está a la derecha del punto decimal.
Public Function ObtenerDecimal(Numero As String) As String
     Dim Posicion As Integer
     Dim TmpDecimal As String
     Posicion = Instr(Texto) 'obtiene la posición del punto decimal en la cadena
     TmpDecimal = Right(Texto, Len(Texto) - Posicion)
     Return TmpDecimal
End Function
Cuando la quieras utilizar, simplemente la asignas a un valor de tipo string, supongo que deberás convertirla a número de nuevo para poder transformarla en minutos.
Dim MiDecimal As String = ObtenerDecimal("15.94")
Espero sea lo que necesitas, si no te funciona me comentas ya que no puedo hacer pruebas por el momento y sólo imaginé el código.
Saludos desde México, Juan Pablo E.P.
Disculpa mi ignoracion pero me marca error al intentar utilizar el InStr (error de resolución de sobre carga porque ninguna de las funciones INSTR a la que ue tiene acceso acepta este numero de argumento)
Copia y pega el código que usas para mandar llamar la función, porque me imagino que le estás enviando un número en vez de texto, es decir, NO conviertes a texto tu número antes de mandarlo a la función que te puse.
Mira el detalle es el siguiente primero cuando un empleado sale lo guardo con el siguiente formato 10.20 am en un var char, cuando el empleado regresa suponiendo 12.50 pm entonces (var char) al asignar el valor a la caja de textos del regreso hago la siguiente operación en otra caja de texto:
LblTiemposalida.Text = Val(txtHorallegada.Text) - Val(txtHoraSalida.Text)
Que lo guardo en un doble 2,2
Pero el resultado que me da en algunas ocasiones es 1.80 que es el que deseo convertir a lo que serian 2.20 horas.
Estimada letycya, creo que te complicaste desde el primer momento, es decir, si vas a manejar "tiempos" ¿por qué almacenarlos como tipo número habiendo campos que sirven para eso?, recomendaría que cambiases eso, pero si ya te encuentras muy "atorada" y lo que necesitas es salir y no escuchar consejos te paso este ejemplo [ya checado, el anterior lo hice "al vuelo"] que te obtiene la parte entera y decimal de una CADENA DE TEXTO [es decir, antes de enviar algo a la función asegúrate de que lo conviertas a texto]
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        TextBox3.Text = TextBox2.Text - TextBox1.Text
        MsgBox(ObtenerEntero(CStr(TextBox3.Text)))
        MsgBox(ObtenerDecimal(CStr(TextBox3.Text)))
        'la función CStr convierte a texto cualquier valor
    End Sub
    Public Function ObtenerDecimal(ByVal Numero As String) As String
        Dim Posicion As Integer
        Dim TmpDecimal As String
        Posicion = InStr(Numero, ".") 'obtiene la posición del punto decimal en la cadena
        TmpDecimal = Microsoft.VisualBasic.Right(Numero, Len(Numero) - Posicion)
        Return TmpDecimal
    End Function
    Public Function ObtenerEntero(ByVal Numero As String) As String
        Dim Posicion As Integer
        Dim TmpEntero As String
        Posicion = InStr(Numero, ".") 'obtiene la posición del punto decimal en la cadena
        TmpEntero = Microsoft.VisualBasic.Left(Numero, Posicion - 1)
        Return TmpEntero
    End Function
End Class
El ejemplo anterior supone un formulario con tres Textbox [Textbox1, Textbox2 y Textbox3], en los primeros 2 escribes la hora de entrada y salida, el tercero se genera automáticamente y envía 2 mensajes en pantalla.
Espero te sirva, te toca convertirlos a horas y minutos, pero si definitivamente no se te da eso de convertirlos a horas y minutos... pues me comentas y los solucionamos.
Saludos desde México, Juan Pablo E.P.
Ya quedo por fin... soy una mujer complicada así que esta fue mi solución para obtener nuevamente los decimales.
Dim X As String
Dim Y As String
Dim Z As String
Z = (ObtenerEntero(CStr(LblTiemposalida.Text)))
X = (ObtenerDecimal(CStr(LblTiemposalida.Text)))
Y = ((X * 10) - 60)
If X < 60 Then
LblTiemposalida.Text = (Z + 1 + (Y / 100))
Else
LblTiemposalida.Text = txtHorallegada.Text - txtHoraSalida.Text
End If
Te agradezco mucho juan Pablo seguimos en contacto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas