Autore Topic: dati float diversi su pc  (Letto 1566 volte)

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
dati float diversi su pc
« il: 02 Giugno 2012, 21:54:35 »
ciao raga
ho questo problema , due pc con sistema operativo linuxmint 11 ed entrambi hanno le impostazioni lingua italiana.

sul primo pc il codice funziona

es. inserisco 42.65 mi restituisce un valore float 42,65

sul secondo pc inserisco 42.65 mi restituisce null

dichiarazione della variabile Myd:
Citazione
Public MyD As Variant

codice:
Citazione
Myd = CStr(Trim(Myd))
     MyD = Replace(MyD, ".", ",")
    MyD = Val(MyD)   
    If TypeOf(MyD) < gb.Float Or TypeOf(MyD) = gb.Float Then
        MyD = CFloat(MyD)
    Else
        MyD = 0
    Endif

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: dati float diversi su pc
« Risposta #1 il: 02 Giugno 2012, 22:46:48 »
A me dà: 42,65.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: dati float diversi su pc
« Risposta #2 il: 11 Giugno 2012, 14:30:23 »
l'errore viene generato da Cfloat che non accetta la virgola come separatore (con il punto funziona), nonostante sull'help di Cfloat è scritto:
Citazione
Attenzione! Questa funzione non tiene conto della localizzazione corrente. Ciò significa che se un'espressione stringa contiene il separatore decimale, il separatore DEVE essere una virgola (,) come accade in francese tedesco ecc

Ora la cosa che non capisco, è, che ho 10 pc tutti con linux mint 11 e tutti impostati come lingua italiano (impostazioni identiche in tutto), come mai su 9 accetta la virgola e su uno vuole il punto?
Su tutti e 10 i pc ho installato gambas 3 dai repo http://www.gambas-it.org/smf/index.php?topic=2064.0.

Da cosa può dipendere l'anomalia? da un problema hardware no, prima sul pc incriminato avevo linux mint 10 e lo stesso programma fatto con g2 funzionava, cfloat accettava la virgola.

Mi manca qualche libreria?

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: dati float diversi su pc
« Risposta #3 il: 11 Giugno 2012, 16:01:23 »
mi vien da pensare che su quel pc non sia impostato la lingua correttamente...

l'output di export cosa ti dice?

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: dati float diversi su pc
« Risposta #4 il: 11 Giugno 2012, 16:18:06 »
Io penserei più ad un'installazione "incompleta" della lingua sui sistemi incriminati.

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: dati float diversi su pc
« Risposta #5 il: 11 Giugno 2012, 22:51:11 »
mi vien da pensare che su quel pc non sia impostato la lingua correttamente...

l'output di export cosa ti dice?

che intendi per output di export?

@md
la lingua risulta completamente installata, il sistema non mi richiede ulteriori pacchetti.
Ma Cfloat non dovrebbe essere indipendente dalla lingua? sui pc (sia alcuni che funzionano sia quello che ha problemi)  ho provato anche a cambiare lingua e formati regionali, funziona sempre, solo su quel pc non và.
Dimenticavo, anche il cd di installazione che ho usato è lo stesso per tutti i pc.

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: dati float diversi su pc
« Risposta #6 il: 11 Giugno 2012, 22:53:32 »
intendo...
apri un terminale, digiti export e dai invio...

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: dati float diversi su pc
« Risposta #7 il: 12 Giugno 2012, 10:22:13 »
mi vien da pensare che su quel pc non sia impostato la lingua correttamente...

l'output di export cosa ti dice?

che intendi per output di export?

@md
la lingua risulta completamente installata, il sistema non mi richiede ulteriori pacchetti.
Ma Cfloat non dovrebbe essere indipendente dalla lingua? sui pc (sia alcuni che funzionano sia quello che ha problemi)  ho provato anche a cambiare lingua e formati regionali, funziona sempre, solo su quel pc non và.
Dimenticavo, anche il cd di installazione che ho usato è lo stesso per tutti i pc.

Ho già scritto su questa cosa in altre discussioni...
I valori in virgola mobile sono valori memorizzati in modalità binaria, con una struttura ben definita. Il come poi viene rappresentato questo numero è un'altro paio di maniche, e dipende da un mucchio di fattori, tra cui:
1) il tipo di formato binario utilizzato a livello di hardware
2) la lingua utilizzata

Riguardo il punto 1), è la libreria che si preoccupa di intepretare il valore in memoria.
Rigaurdo al punto 2), anche qui è la funzione che si occupa di rappresentare il valore.

Esiste però un problema, ovvero la differenza tra rappresentazione a video e l'interpretazione di un valore passato come stringa. In questo caso, esistono diverse funzioni atte allo scopo, e alcune dipendono alle impostazioni globali del sistema, come ad esempio la lingua usata.

Faccio un esempio:
a) CFloat(), che è una funzione che permette la conversione da un valore stringa in un valore numerico in virgola mobile, non tiene conto dell'impostazione di lingua usata, ma desidera avere come valore in input un rappresentazione in formato Americano, ovvero con il punto di separazione tra interi e decimali.
b) Val(), al contrario, dipende dalla lingua usata, per cui accetta valori che, in Italia e similari, hanno la virgola come separatore ma, per esempio, in USA è il contrario. Questo vuol dire che è necessaria un'attenzione particolare nelle procedure di lettura/scrittura di variabili miste.

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: dati float diversi su pc
« Risposta #8 il: 12 Giugno 2012, 14:38:18 »
mi sa che ci avete preso, è proprio la lingua.
solo che sul sistema tutti i pacchetti della lingua risultano installati.

questo il pc dove funziona, risultato di export:
Citazione
declare -x COLORTERM="gnome-terminal"
declare -x COMPIZ_CONFIG_PROFILE="ubuntu"
declare -x DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-efSWHS4MSq,guid=9477b39f43f884cf6158d86500000028"
declare -x DEFAULTS_PATH="/usr/share/gconf/gnome.default.path"
declare -x DESKTOP_SESSION="gnome"
declare -x DISPLAY=":0"
declare -x GDMSESSION="gnome"
declare -x GDM_KEYBOARD_LAYOUT="it"
declare -x GDM_LANG="it_IT.utf8"
declare -x GNOME_DESKTOP_SESSION_ID="this-is-deprecated"
declare -x GNOME_KEYRING_CONTROL="/tmp/keyring-2ry5Yc"
declare -x GNOME_KEYRING_PID="1901"
declare -x GTK_MODULES="canberra-gtk-module"
declare -x HOME="/home/aft-casa"
declare -x LANG="it_IT.UTF-8"
declare -x LANGUAGE="it_IT:en"
declare -x LOGNAME="aft-casa"
declare -x MANDATORY_PATH="/usr/share/gconf/gnome.mandatory.path"
declare -x OLDPWD
declare -x ORBIT_SOCKETDIR="/tmp/orbit-aft-casa"
declare -x PATH="/home/aft-casa/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
declare -x PWD="/home/aft-casa"
declare -x SESSION_MANAGER="local/aftcasa-System-Product-Name:@/tmp/.ICE-unix/1920,unix/aftcasa-System-Product-Name:/tmp/.ICE-unix/1920"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_AGENT_PID="1953"
declare -x SSH_AUTH_SOCK="/tmp/keyring-2ry5Yc/ssh"
declare -x TERM="xterm"
declare -x UBUNTU_MENUPROXY="libappmenu.so"
declare -x USER="aft-casa"
declare -x USERNAME="aft-casa"
declare -x WINDOWID="65011742"
declare -x WINDOWPATH="7"
declare -x XAUTHORITY="/var/run/gdm/auth-for-aft-casa-8RP4Ew/database"
declare -x XDG_CONFIG_DIRS="/etc/xdg/xdg-gnome:/etc/xdg"
declare -x XDG_DATA_DIRS="/usr/share/gnome:/usr/local/share/:/usr/share/"
declare -x XDG_SESSION_COOKIE="0079d04dd2fb52fb354fcff000000009-1339447207.88490-1961793978"

questo il pc dove dà problemi:
Citazione
declare -x COLORTERM="gnome-terminal"
declare -x COMPIZ_CONFIG_PROFILE="ubuntu"
declare -x DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-TJzJXK7hl9,guid=657942f50da71f2a48ca523700000027"
declare -x DEFAULTS_PATH="/usr/share/gconf/gnome.default.path"
declare -x DESKTOP_SESSION="gnome"
declare -x DISPLAY=":0.0"
declare -x GDMSESSION="gnome"
declare -x GDM_KEYBOARD_LAYOUT="it"
declare -x GDM_LANG="it"
declare -x GNOME_DESKTOP_SESSION_ID="this-is-deprecated"
declare -x GNOME_KEYRING_CONTROL="/tmp/keyring-v6IIy0"
declare -x GNOME_KEYRING_PID="1554"
declare -x GTK_MODULES="canberra-gtk-module"
declare -x HOME="/home/gio"
declare -x LANG="it_IT.UTF-8"
declare -x LANGUAGE="it:en"
declare -x LC_ADDRESS="en_US.UTF-8"
declare -x LC_IDENTIFICATION="en_US.UTF-8"
declare -x LC_MEASUREMENT="en_US.UTF-8"
declare -x LC_MONETARY="en_US.UTF-8"
declare -x LC_NAME="en_US.UTF-8"
declare -x LC_NUMERIC="en_US.UTF-8"
declare -x LC_PAPER="en_US.UTF-8"
declare -x LC_TELEPHONE="en_US.UTF-8"
declare -x LC_TIME="en_US.UTF-8"
declare -x LESSCLOSE="/usr/bin/lesspipe %s %s"
declare -x LESSOPEN="| /usr/bin/lesspipe %s"
declare -x LIBGL_DRIVERS_PATH="/usr/lib/fglrx/dri"
declare -x LOGNAME="gio"
declare -x LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:"
declare -x MANDATORY_PATH="/usr/share/gconf/gnome.mandatory.path"
declare -x OLDPWD
declare -x ORBIT_SOCKETDIR="/tmp/orbit-gio"
declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
declare -x PWD="/home/gio"
declare -x SESSION_MANAGER="local/gio-mint:@/tmp/.ICE-unix/1573,unix/gio-mint:/tmp/.ICE-unix/1573"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_AGENT_PID="1608"
declare -x SSH_AUTH_SOCK="/tmp/keyring-v6IIy0/ssh"
declare -x TERM="xterm"
declare -x UBUNTU_MENUPROXY="libappmenu.so"
declare -x USER="gio"
declare -x USERNAME="gio"
declare -x WINDOWID="62914589"
declare -x WINDOWPATH="7"
declare -x XAUTHORITY="/var/run/gdm/auth-for-gio-C7PROM/database"
declare -x XDG_CONFIG_DIRS="/etc/xdg/xdg-gnome:/etc/xdg"
declare -x XDG_DATA_DIRS="/usr/share/gnome:/usr/local/share/:/usr/share/"
declare -x XDG_SESSION_COOKIE="8fcff6dbac921937da536d1000000013-1339488905.797656-275672150"

come faccio a forzare il sistema per configuralo nel modo giusto?

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: dati float diversi su pc
« Risposta #9 il: 12 Giugno 2012, 14:59:10 »
Sul fatto che c'havevamo ragione non c'erano dubbi...  :evil:

Scherzi a parte, ora viene il problema, perchè devi individuare i programmi, uno per uno, e configurarli...

In alternativa, potresti provare a modificare il "profile" del tuo utente, o quello a livello globale.

Puoi anche fare un controllo veloce, impostando le variabile LANG e LANGUAGE, e tutte quelle che si riferiscono ad impostazioni di lingua, nel terminale da cui poi lancerai l'export. Comunque, imposta prima le varibili di ambiente (sempre da terminale) e lancia subito dopo il tuo eseguibile (sempre dallo stesso terminale, e stesso user).

Un esempio:

export LANG=it_IT.UTF-8
...
e via dicendo...

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: dati float diversi su pc
« Risposta #10 il: 12 Giugno 2012, 21:51:10 »
io comunque, se non hai programmi particolari su quel pc, eliminerei tutte le variabili LC_qualchecosa con il comando unset LC_qualchecosa

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: dati float diversi su pc
« Risposta #11 il: 12 Giugno 2012, 21:57:42 »
grazie raga
ora provo a modificare il tutto.

mi è sorto un dubbio, non ne sono sicuro, ma in fase di installazione quando ho avviato il live non ho scelto lingua italiana ma ho installato con il live avviato in inglese. può essere stato questo a settarmi il sistema in inglese?

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: dati float diversi su pc
« Risposta #12 il: 12 Giugno 2012, 22:06:43 »
Tutto puo' essere :)...

Leggendo comunque su wikipedia le variabili d'ambiente LC_qualchecosa hanno la precedenza sulla variabile LANG.... c'e' sempre da imparare! :)

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: dati float diversi su pc
« Risposta #13 il: 12 Giugno 2012, 22:11:09 »

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: dati float diversi su pc
« Risposta #14 il: 14 Giugno 2012, 13:28:24 »
Raga provato ad eliminare le Variabili LC_ con unset, prima do dovuto settarle a vuoto altrimenti unset non le toglieva poi eliminale.
Il problema è che al riavvio c'erano di nuovo, deve essere qualche programma che le setta in fase di avvio.