Portal    Foro    Buscar    FAQ    Registrarse    Conectarse

¿punto O Coma Decimal?

¿punto O Coma Decimal?
Artículo
Responder citando    Descargar mensaje  
Mensaje ¿punto O Coma Decimal? 
 
¿Como puede saber un programa, si el sistema donde se esta ejecutando, usa el punto o coma decimal para los numeros?

Me hace falta saber esto porque algunos de mis programas usan VAL(...) para convertir un texto que tenga un numero en un valor numerico. Pero la función Val() me da error si el sistema usa punto o coma decimal (según como este configurado el idioma del sistema...)



 
jsbsan - Ver perfil del usuario Enviar mensaje privado  
jsbsan [ Jueves, 09 Noviembre 2017, 22:45 ]
 


¿punto O Coma Decimal?
Comentarios
Responder citando    Descargar mensaje  
Mensaje Re: ¿punto O Coma Decimal? 
 
Julio:

Muestra un ejemplo de como lo haces.  

¿ Y si compruebas que es un número ?.

Saludos



 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Viernes, 10 Noviembre 2017, 09:34 ]
Responder citando    Descargar mensaje  
Mensaje Re: ¿punto O Coma Decimal? 
 
Fíjate en la salida de esto:

Public Sub Main()
  
  Print IsNumber("1,2")
  Print IsNumber("1.2")
  
End
 


Saludos



 
última edición por Shell el Viernes, 10 Noviembre 2017, 09:41; editado 1 vez 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Viernes, 10 Noviembre 2017, 09:40 ]
Responder citando    Descargar mensaje  
Mensaje Re: ¿punto O Coma Decimal? 
 
locale LC_NUMERIC

Saludos.



 
tincho - Ver perfil del usuario Enviar mensaje privado  
tincho [ Viernes, 10 Noviembre 2017, 11:51 ]
Responder citando    Descargar mensaje  
Mensaje Re: ¿punto O Coma Decimal? 
 
Tincho:

Con gambas no he podido ver la variable de entorno que nombras.  

Public Sub Main()
  
  Dim varentorno As String
    
  For Each varentorno In Application.Env    
    'Mostrar variables de entorno que comiencen con la letra "L"  
    If Left(varentorno, 1) = "L" Then Print varentorno & " | " & Application.Env[varentorno]
  Next
  
End
 


Añadir que si uso el comando locale desde la consola de Linux.

Citar:

Los locales se utilizan en Linux para definir el idioma que el usuario utiliza. En la medida que los locales definen los juegos de caracteres utilizados, establecer la configuración regional correcta es especialmente importante si el idioma contiene caracteres no ASCII.


locale
 


La salida que se muestra en Linux Mint 17.3 64b es:

Citar:

LANG=es_ES.UTF-8
LANGUAGE=
LC_CTYPE="es_ES.UTF-8"
LC_NUMERIC="es_ES.UTF-8"
LC_TIME="es_ES.UTF-8"
LC_COLLATE="es_ES.UTF-8"
LC_MONETARY="es_ES.UTF-8"
LC_MESSAGES="es_ES.UTF-8"
LC_PAPER="es_ES.UTF-8"
LC_NAME="es_ES.UTF-8"
LC_ADDRESS="es_ES.UTF-8"
LC_TELEPHONE="es_ES.UTF-8"
LC_MEASUREMENT="es_ES.UTF-8"
LC_IDENTIFICATION="es_ES.UTF-8"
LC_ALL=


No vemos mucho que digamos.  

Saludos



 
última edición por Shell el Viernes, 10 Noviembre 2017, 14:54; editado 1 vez 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Viernes, 10 Noviembre 2017, 14:43 ]
Responder citando    Descargar mensaje  
Mensaje Re: ¿punto O Coma Decimal? 
 
Es un comando shell "locale" con un parametro "LC_NUMERIC"

Pero bueno hice una función para que devuelva esto:

Public Function GetLcNumeric() As String[] '' <p>Devuelve una matriz de texto con la configuracion de la nmeración del sistema.</p><ol><li>Decimales</li><li>Miles</li><li>??</li><li>??</li><li>??</li><li>Codificación</li></ol>
  
  Dim str As String
  Dim stx As New String[]
  
  Shell "locale LC_NUMERIC" To str
  
  If InStr(str, "\n") > 0 Then
    stx = Split(str, "\n")
  Endif
  
  Return stx
  
End
 


Es decir GetLcNumeric[0] es el carácter separador de decimales.

Saludos.



 
tincho - Ver perfil del usuario Enviar mensaje privado  
tincho [ Viernes, 10 Noviembre 2017, 17:43 ]
Responder citando    Descargar mensaje  
Mensaje Re: ¿punto O Coma Decimal? 
 
Tincho:

Gracias, interesante comando... que no conocia... y aun mejor tu función
La tendrá que subir al proyecto que tienes en github de funciones!!!

Shell:

Citar:
Muestra un ejemplo de como lo haces.

Basicamente, se trata de leer un fichero .svg y extraer información de él.
El "trozo" de código que me interesa, es donde se indica una posicion en pantalla (x, y) de una imagen "insertada" en el .svg, pero que al extraerla (como es texto), la tengo que convertir en un numero. Y por ahí empieza el problema del punto decimal o coma decimal y la función Val()



 
jsbsan - Ver perfil del usuario Enviar mensaje privado  
jsbsan [ Viernes, 10 Noviembre 2017, 19:51 ]
Responder citando    Descargar mensaje  
Mensaje Re: ¿punto O Coma Decimal? 
 
jsbsan escribió: [Ver mensaje]
...La tendrá que subir al proyecto que tienes en github de funciones!!!

Si, la agregue ya a GEF, en estos dias estoy metiendole mano para mejorar algunas cosas y en cuanto lo tenga lo subo, incluida esta funcion tambien.

Citar:
...El "trozo" de código que me interesa, es donde se indica una posicion en pantalla (x, y) de una imagen "insertada" en el .svg, pero que al extraerla (como es texto), la tengo que convertir en un numero. Y por ahí empieza el problema del punto decimal o coma decimal y la función Val()


No probaste con la función replace y de todas maneras en el svg siempre el decimal es con un punto no? y gambas también no?

Saludos.



 
tincho - Ver perfil del usuario Enviar mensaje privado  
tincho [ Viernes, 10 Noviembre 2017, 22:10 ]
Responder citando    Descargar mensaje  
Mensaje Re: ¿punto O Coma Decimal? 
 
Tincho:

Citar:
No probaste con la función replace y de todas maneras en el svg siempre el decimal es con un punto no? y gambas también no?


Prueba esto:
  Print Val("23.34") 'a mi no me convierte nada, ni siquiera devuelve 0
  Print Val("23,34") 'si convierte en numero
 
Fijate, en mi sistema (con la configuración en Español) la primera linea, no da ningun valor, pero en la segunda, si devuelve el numero 23,34

Si hago una operación:
  Print Val("23.34") * 8  '-> se genera un error !!!
  Print Val("23,34") * 8
 

Da el siguiente error:
 error_1510391695_816139

El sistema operativo donde me daba problemas el programa, estaba configurado en Mexicano, y allí, si se producia error... en la 2º linea (al reves que a mi!!)

Nota.
Por si teneis curiosidad
Mira este es el código original, que con la configuración en español, no daba problemas:
  
Private Sub extraeXY(texto As String) As ClassPos
  
Dim posicion As New ClassPos
  
posicion.x = Val(Replace$(comun.Between(texto, "X=\"", "\""), ".", ","))
posicion.y = Val(Replace$(comun.Between(texto, "Y=\"", "\""), ".", ",")) - 70 'subo un poco las fotos de profesores
Return posicion
  
End


Como ves mi codigo sustituye el punto decimal por la coma decimal, y entonces Val convierte el texto en numero sin problema.

Pero, un señor de mexico, probo el programa y le daba este error:
   orla

Y el código lo he corregido de esta manera:
Private Sub extraeXY(texto As String) As ClassPos
 Dim posicion As New ClassPos

  Try posicion.x = Val(Replace$(comun.Between(texto, "X=\"", "\""), ".", ","))
  If Error Then
    posicion.x = Val(comun.Between(texto, "X=\"", "\""))
  Endif
  Try posicion.y = Val(Replace$(comun.Between(texto, "Y=\"", "\""), ".", ",")) - 70 'subo un poco las fotos de profesores
  If Error Then
    posicion.y = Val(comun.Between(texto, "Y=\"", "\"")) - 70
  Endif
  Return posicion
  
End




 
jsbsan - Ver perfil del usuario Enviar mensaje privado  
jsbsan [ Sabado, 11 Noviembre 2017, 10:20 ]
Responder citando    Descargar mensaje  
Mensaje Re: ¿punto O Coma Decimal? 
 
Val tiene en cuenta los parámetros de Localización de números y Fechas y si el formato no le cuadra con nada, devuelve null (un vistazo a las ayudas).

Si lo que tienes es una cadena, no te comas el tarro. Con algo así:


dim n as float

try n=val(cadena)
if error then n=val(replace(cadena,".",","))
 


Lo deberías tener solucionado.

Si lo sacas a una funcioncita ya lo tienes para siempre...

Saludos



 
shordi - Ver perfil del usuario Enviar mensaje privado  
shordi [ Sabado, 11 Noviembre 2017, 13:32 ]
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
0.00 0 0 0
 
Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  Siguiente
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno