¿punto O Coma Decimal?


Ir a la página 1, 2  Siguiente

Objetivo: ¿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...)

Objetivo: Re: ¿punto O Coma Decimal?
Julio:

Muestra un ejemplo de como lo haces.

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

Saludos

Objetivo: 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
Objetivo: Re: ¿punto O Coma Decimal?
locale LC_NUMERIC

Saludos.

Perfil MP  
Objetivo: 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
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:

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.

Perfil MP  
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:

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()

Objetivo: 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.

Perfil MP  
Objetivo: 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

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í:


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

Perfil MP  
Ir a la página 1, 2  Siguiente

Página 1 de 2


  
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
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