Ho riscontrato un possibile bug in questa ultima versione di gambas la 3.21 che nelle precedenti, nella 3.20 non è presente, e riguarda la funzione aritmetica Fix(numero) che tronca un float in un intero.
L'argomento è un pò generico ma immagino che il dato sia un variant di tipo numerico.
Dim intero as Integer
Dim flottante as Float = 3.1
intero = Fix(flottante)
il processo si arresta con un messaggio di errore:
Tipo non corrispondente: cercato String, ottenuto Void al suo posto
Probabilmente la causa è nella conversione implicita del tipo di dato, se modifichiamo il codice, si risolve il problema:
Dim intero as Integer
Dim flottante as Float = 3.1
intero = Fix(CStr(flottante))
Per evitare inutili conversioni il codice potrebbe essere questo:
Dim intero as Integer
Dim flottante as Float = 3.1
intero = CInt(flottante)
Sei sicuro che il codice sia corretto?
Non dovrebbe essere Dim intero as Integer
Dim flottante as Float = 3.1
intero = Fix(Val(Str(flottante)))
Scusa prima l'avevo scritto alla rovescia
:ciao:
Se vai nel reference delle funzioni aritmetiche io vedo che la forma è:
valore=funzionearitmetica(numero)
perchè valore=int(3.1) me lo accetta e invece valore=fix(3.1) mi da errore?
E comunque ho sempre usato questa applicazione senza mai darmi errori e invece con l'ultimo aggionamento non mi funziona?
Se è una scelta progetturale basta saperlo.
La funzione reale incriminata della mia applicazione , che prima non dava questo problema:
Public Sub Aggiusta()
Dim SecondiInteri As Integer
SecondiInteri = Fix($fSecondiBase)
$iMilliSecondi = Fix(Frac($fSecondiBase) * 1000)
$iSecondi = SecondiInteri Mod SEI0
$iPrimi = (SecondiInteri Div SEI0) Mod SEI0
$iGradiOra = (SecondiInteri Div SEI0XSEI0)
End
Se vai nel reference delle funzioni aritmetiche io vedo che la forma è:
valore=funzionearitmetica(numero)
perchè valore=int(3.1) me lo accetta e invece valore=fix(3.1) mi da errore?
E comunque ho sempre usato questa applicazione senza mai darmi errori e invece con l'ultimo aggionamento non mi funziona?
Se è una scelta progetturale basta saperlo.
La funzione reale incriminata della mia applicazione , che prima non dava questo problema:
Public Sub Aggiusta()
Dim SecondiInteri As Integer
SecondiInteri = Fix($fSecondiBase)
$iMilliSecondi = Fix(Frac($fSecondiBase) * 1000)
$iSecondi = SecondiInteri Mod SEI0
$iPrimi = (SecondiInteri Div SEI0) Mod SEI0
$iGradiOra = (SecondiInteri Div SEI0XSEI0)
End
SecondiInteri = Fix($fSecondiBase)
Qui tu passi una stringa a una funzione che si aspetta un valore float, se prima funzionava il bug c'era prima.
Devi anche stare attento perché può essere che in qualche caso si verifichi (come hai detto) una conversione implicita ma non è detto che questo avvenga in tutti i casi.
È sempre sbagliato passare una stringa la dove è atteso un numero.
Cambia la stringa in numero (anche al volo come nel codice che ti ho passato) e vedrai che funziona.
Ora esco, al limite ci sentiamo più avanti.
Se invece questo codice:
da errore (o non restituisce 3) allora siamo di fronte a un bug che va segnalato.
:ciao:
$fSecondiBase è un float ho messo il $ per ricordarmi che è una variabile globale privata.
Print Fix(3.1) da errore (sul mio sistema).
Su una VM con Debian 13 Trixie ho installato l'ultima stabile di Gambas=3.21.3.
funziona.
Credo di averlo già scritto che Gambas sui repository di Debian non funziona.
Devi scaricarlo seguendo queste istruzioni:
https://gambaswiki.org/wiki/doc/packages#t3
Comunque per evitarti mal di testa ti scrivo di seguito la procedura:
Naturalmente prima devi disinstallare il gambas che hai:
$ sudo apt-get purge gambas3*
$ sudo apt-get autoremove
Se non hai sudo puoi installarlo così:
$ su -l
Password: (quella di root)
root@debian:~# adduser <tuo user> sudo
root@debian:~# reboot
Dopo che hai riavviato installi curl, i repository OBS e Gambas3 (ultima stabile):
$ sudo apt install curl (password del tuo user)
$ su -l
Password: (quella di root)
root@debian:~# echo 'deb http://downloadcontent.opensuse.org/repositories/home:/gambas:/stable/Debian_13/ /' | tee /etc/apt/sources.list.d/home:gambas:stable.list
deb http://downloadcontent.opensuse.org/repositories/home:/gambas:/stable/Debian_13/ /
root@debian:~# curl -fsSL https://downloadcontent.opensuse.org/repositories/home:gambas:stable/Debian_13/Release.key | gpg --dearmor | tee /etc/apt/trusted.gpg.d/home_gambas_stable.gpg > /dev/null
root@debian:~# apt-get update
root@debian:~# apt-get upgrade
root@debian:~# apt-get install gambas3
root@debian:~# apt autoremove
root@debian:~# exit
e quando uscirà una nuova versione di Gambas stabile si aggiornerà automaticamente insieme agli altri aggiornamenti.
Sarà ovvio ma i comandi vanno copiati, uno alla volta, in un terminale dopo i simboli $ (user) e # (root).
Qui avevo scritto qualcosa:
https://www.gambas-it.org/wiki/index.php/Installazione_di_Gambas3_dai_pacchetti_binari
:ciao: