|
Página 1 de 2
|
Autor |
Mensaje |
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
¿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...)
|
#1 Jueves, 09 Noviembre 2017, 22:45 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
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"
|
#2 Viernes, 10 Noviembre 2017, 09:34 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: ¿punto O Coma Decimal?
Fíjate en la salida de esto:
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
|
#3 Viernes, 10 Noviembre 2017, 09:40 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Re: ¿punto O Coma Decimal?
locale LC_NUMERIC
Saludos.
|
#4 Viernes, 10 Noviembre 2017, 11:51 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: ¿punto O Coma Decimal?
Tincho:
Con gambas no he podido ver la variable de entorno que nombras.
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.
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
|
#5 Viernes, 10 Noviembre 2017, 14:43 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
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:
Es decir GetLcNumeric[0] es el carácter separador de decimales.
Saludos.
|
#6 Viernes, 10 Noviembre 2017, 17:43 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
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()
|
#7 Viernes, 10 Noviembre 2017, 19:51 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Re: ¿punto O Coma Decimal?
...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.
|
#8 Viernes, 10 Noviembre 2017, 22:10 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
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:
Da el siguiente error:
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:
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
|
#9 Sabado, 11 Noviembre 2017, 10:20 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
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í:
Lo deberías tener solucionado.
Si lo sacas a una funcioncita ya lo tienes para siempre...
Saludos
=================== No podemos regresar
|
#10 Sabado, 11 Noviembre 2017, 13:32 |
|
|
|
|
Página 1 de 2
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
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
|
|
|
|
|