¿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...)
¿punto O Coma Decimal?
Objetivo: Re: ¿punto O Coma Decimal?
Julio:
Muestra un ejemplo de como lo haces.
¿ Y si compruebas que es un número ?.
Saludos
Muestra un ejemplo de como lo haces.

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

Saludos
Objetivo: Re: ¿punto O Coma Decimal?
última edición por Shell el Viernes, 10 Noviembre 2017, 09:41; editado 1 vez
Fíjate en la salida de esto:
Saludos
Saludos
última edición por Shell el Viernes, 10 Noviembre 2017, 09:41; editado 1 vez
Objetivo: Re: ¿punto O Coma Decimal?
última edición por Shell el Viernes, 10 Noviembre 2017, 14:54; editado 1 vez
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.
La salida que se muestra en Linux Mint 17.3 64b es:
No vemos mucho que digamos.
Saludos
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:
locale
La salida que se muestra en Linux Mint 17.3 64b es:
Citar:
No vemos mucho que digamos.

Saludos
última edición por Shell el Viernes, 10 Noviembre 2017, 14:54; editado 1 vez
Objetivo: 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.
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
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.
Objetivo: 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:
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()
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:
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()
Objetivo: Re: ¿punto O Coma Decimal?
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.
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.
jsbsan escribió: [Ver mensaje]
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:
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.
Objetivo: Re: ¿punto O Coma Decimal?
Tincho:
Prueba esto:
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:
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:
Citar:
Prueba esto:
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:
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
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
Objetivo: 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
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
Página 1 de 2
No puede crear mensajesNo puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
No puede publicar eventos en el calendario
Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.
Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo
Página generada en:: 0.1131s (PHP: 30% SQL: 70%)
Consultas SQL: 20 - Debug off - GZIP Activado