Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 2
Ir a la página 1, 2  Siguiente
 
¿punto O Coma Decimal?
Autor Mensaje
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...)
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
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
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
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
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Viernes, 10 Noviembre 2017, 09:41; editado 1 vez 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿punto O Coma Decimal? 
 
locale LC_NUMERIC

Saludos.
 



 
tincho - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
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
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Viernes, 10 Noviembre 2017, 14:54; editado 1 vez 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
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 usuarioEnviar mensaje privado 
Volver arribaPágina inferior
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()
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
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 usuarioEnviar mensaje privado 
Volver arribaPágina inferior
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

 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
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
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 

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


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron