Access - DETERMINAR SI UN VALOR ES NUMÉRICO

   
Vista:

DETERMINAR SI UN VALOR ES NUMÉRICO

Publicado por betico (1 intervención) el 02/06/2015 12:39:17
Hola a todos.

En una aplicación que estoy desarrollando necesito determinar si un valor es o no numérico. Naturalmente lo primero que he hecho es utilizar la funcion Isnumeric pero el problema es que parece que hay algo que falla con esa función. Si el valor sobre el que se aplica contiene una letra D o una letra C, lo da como numérico. No ocurre con otras letras por lo que he podido ver. Por ejemplo:

- Isnumeric(568D104) --> Verdadero
- Isnumeric(568C104) --> Falso

No le encuentro lógica a este comportamiento. No se si alguien me puede dar una explicación o alguna forma de solucionarlo.

Un saludo y muchas gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Norberto

DETERMINAR SI UN VALOR ES NUMÉRICO

Publicado por Norberto (432 intervenciones) el 02/06/2015 18:01:23
Hola.

Simplemente pon en la ventana de inmediato ? 568d104 y verás la respuesta. 568d104 es lo mismo que 568e104 que es 568 x 10^104, por lo que lo toma como número.

Deberás usar una función para determinar si es numérico comprobando uno a uno los caracteres. Algo así como:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Public Function EsNumérico(Valor As String) As Boolean
    Const Nums = "0123456789"
 
    Dim i As Integer, c As String * 1, Coma As Boolean
 
    EsNumérico = True   'Asumimos que es numérico
 
    For i = 1 To Len(Valor) 'Recoremos todos los caracteres del valor
        c = Mid(Valor, i, 1)
        If c = "," Then     'Si es una coma
            If Coma Then    'Si ya ha habido una coma anterior
                EsNumérico = False  'No es numérico
                Exit For    'y salimos
            Else
                Coma = True 'Recordamos que ya ha salido una coma pero sigue
                            'siendo numérico
            End If
        ElseIf c = "-" Then 'Si es un guión
            If i > 1 Then   'si no es el primer carácter
                EsNumérico = False  'no es numérico
                Exit For
            End If
        ElseIf InStr(1, Nums, c) = 0 Then   'Por último, si no se encuentra en la
                                            'cadena de números,
            EsNumérico = False              'no es numérico
            Exit For
        End If
 
    Next
End Function

Un saludo,

Norberto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar