border

Miembros:
Mensajes:
Temas:
Online:

Ultimo Miembro:

 
 

  #1 (permalink)  
Antiguo 09-05-2008, 19:25:55
Gran Participación en el Foro
 
Registrado: ene 2007
Posts: 127
visual_v Valoración +2
Predeterminado Duda con decimales

Por favor, ¿alguien podría decirme como puedo tratar números decimales en VB?
Para empezar, declaro la variable que almacenará el dato decimal como long.
Y luego, le aplico lo siguiente:

Private Sub TxtImporte_KeyPress(KeyAscii As Integer)

Dim c As Integer
If KeyAscii = 13 Then
KeyAscii = 0 ' Para que no "pite"
SendKeys "{tab}" ' Envía una pulsación TAB
ElseIf KeyAscii <> 8 Or KeyAscii = 46 Then ' El 8 es la tecla de borrar (backspace)
' Si después de añadirle la tecla actual no es un número...
'If Not IsNumeric("0" & Text1.Text & Chr(KeyAscii)) Then
If Not IsNumeric(Chr(KeyAscii)) Then
' ... se desecha esa tecla y se avisa de que no es correcta
If KeyAscii = 46 Then
i = InStr(1, TxtImporte.Text, ".", vbTextCompare)
If i <> 0 Then
Beep
KeyAscii = 0
End If
Else
Beep
KeyAscii = 0
End If
End If
End If


End Sub

El problema está en que cuando intento guardar el valor del txt en la variable de tipo long, no coinciden los tipos:
Si fuera doble haría lo siguiente:
importe = CDbl(Form4.TxtImporte.Text)

Pero si es un long, ¿cómo puedo convertirlo? es que no encuentro el método que lo convierta
Gracias de antemano.
Responder Con Cita
  #2 (permalink)  
Antiguo 09-05-2008, 20:41:15
Moderador
 
Registrado: dic 2002
Ubicación: Madrid
Posts: 4.155
acalanto Valoración +2
Predeterminado Re: Duda con decimales

La función que convierte a tipo Long es Clng() pero debes tener en cuenta que LONG, como su propio nombre indica, es un tipo de dato numérico ENTERO y por esta razón los decimales nunca te los almacenará. Debes utilizar algún dato tipo Single o Double dependiendo de los valores que pretendas almacenar. Consulta la ayuda de MSDN para estudiar los valores mínimos y máximos que pueden almacenar, así como la precisión decimal que soportan.


Espero que te resulte útil.
__________________
Un cordial saludo
-Acalanto-

Madrid - España

Visual Basic
Videos Programacion
Foro Programacion
Tutoriales Programacion
Responder Con Cita
  #3 (permalink)  
Antiguo 11-05-2008, 09:44:00
Gran Participación en el Foro
 
Registrado: ene 2007
Posts: 127
visual_v Valoración +2
Predeterminado Re: Duda con decimales

Es curioso por que aún convirtiendolo a double, sucede lo siguiente:

Si TxtImporte.Text contiene = 123.12
Cuando convierto su valor a double y lo guardo en la variable importe:
importe = CDbl(Form4.TxtImporte.Text)

Guarda 12312. Es decir la variable importe en vez de contenter 123.12 contiene 12312, ¿porque?

Gracias de nuevo !!!
Responder Con Cita
  #4 (permalink)  
Antiguo 11-05-2008, 09:53:24
Moderador
 
Registrado: dic 2002
Ubicación: Madrid
Posts: 4.155
acalanto Valoración +2
Predeterminado Re: Duda con decimales

Pues seguramente es debido a que tienes configurado en el sistema la 'coma' como separador decimal.

Comprueba cDbl(123,12) y ya verás como te lo transforma correctamente.
__________________
Un cordial saludo
-Acalanto-

Madrid - España

Visual Basic
Videos Programacion
Foro Programacion
Tutoriales Programacion
Responder Con Cita
  #5 (permalink)  
Antiguo 11-05-2008, 13:15:55
Gran Participación en el Foro
 
Registrado: ene 2007
Posts: 127
visual_v Valoración +2
Predeterminado Re: Duda con decimales

Es cierto, he probado CDbl(123,12) y lo almacena bien.
En cambio con el punto lo coge como un entero, es decir: 12312.
¿Cómo puedo hacer para que el sistema reconozca el punto '.' como separador decimal?
Gracias.
Responder Con Cita
  #6 (permalink)  
Antiguo 11-05-2008, 13:29:57
Moderador
 
Registrado: dic 2002
Ubicación: Madrid
Posts: 4.155
acalanto Valoración +2
Predeterminado Re: Duda con decimales

Prueba a utilizar esta función


Código:
 
Public Function DConv(v As Variant) As Variant
    On Local Error Resume Next
    If InStrRev(v, ",") <> 0 Then
        DConv = CDbl(v)
    ElseIf InStrRev(v, ".") <> 0 Then
        DConv = CDbl(Val(v))
    Else
        DConv = CDbl(Val(v))
    End If
End Function
__________________
Un cordial saludo
-Acalanto-

Madrid - España

Visual Basic
Videos Programacion
Foro Programacion
Tutoriales Programacion
Responder Con Cita
  #7 (permalink)  
Antiguo 12-05-2008, 19:36:39
Gran Participación en el Foro
 
Registrado: ene 2007
Posts: 127
visual_v Valoración +2
Predeterminado Re: Duda con decimales

Acalanto te mereces un monumento !!!
Muchas gracias, por fin salió !!!!
GRACIAS !!!!!!!!!!!!!!!!!!!!!
Responder Con Cita
Respuesta


Herramientas
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Trackbacks are habilitado
Pingbacks are habilitado
Refbacks are habilitado



La franja horaria es GMT. Ahora son las 07:47:58.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO 3.1.0
A vBSkinworks Design

Alojado en el servicio Premium de Masquewebs | Diseño mejorado por MasqueWebs

right