Autore Topic: Anomalia nella function Fix  (Letto 8297 volte)

Offline Archimedes

  • Gamberetto
  • *
  • Post: 24
    • Mostra profilo
Anomalia nella function Fix
« il: 27 Gennaio 2026, 18:02:31 »
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.

Codice: [Seleziona]
Dim intero as Integer
Dim flottante as Float = 3.1

intero = Fix(flottante)

il processo si arresta con un messaggio di errore:

Citazione
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:
Codice: [Seleziona]
Dim intero as Integer
Dim flottante as Float = 3.1

intero = Fix(CStr(flottante))

Per evitare inutili conversioni il codice potrebbe essere questo:
Codice: [Seleziona]
Dim intero as Integer
Dim flottante as Float = 3.1

intero = CInt(flottante)
« Ultima modifica: 27 Gennaio 2026, 18:05:52 da Archimedes »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.288
  • Tonno verde
    • Mostra profilo
Re:Anomalia nella function Fix
« Risposta #1 il: 27 Gennaio 2026, 18:21:36 »
Sei sicuro che il codice sia corretto?
Non dovrebbe essere
Codice: [Seleziona]
Dim intero as Integer
Dim flottante as Float = 3.1

intero = Fix(Val(Str(flottante)))

Scusa prima l'avevo scritto alla rovescia
 :ciao:
« Ultima modifica: 27 Gennaio 2026, 18:34:41 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Archimedes

  • Gamberetto
  • *
  • Post: 24
    • Mostra profilo
Re:Anomalia nella function Fix
« Risposta #2 il: 27 Gennaio 2026, 18:57:35 »
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:
Codice: [Seleziona]
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
« Ultima modifica: 27 Gennaio 2026, 19:03:34 da Archimedes »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.288
  • Tonno verde
    • Mostra profilo
Re:Anomalia nella function Fix
« Risposta #3 il: 27 Gennaio 2026, 19:30:39 »
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:
Codice: [Seleziona]
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

Codice: [Seleziona]
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:
Codice: [Seleziona]
Print Fix(3.1)
da errore (o non restituisce 3) allora siamo di fronte a un bug che va segnalato.

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Archimedes

  • Gamberetto
  • *
  • Post: 24
    • Mostra profilo
Re:Anomalia nella function Fix
« Risposta #4 il: 27 Gennaio 2026, 19:54:04 »
$fSecondiBase è un float ho messo il $ per ricordarmi che è una variabile globale privata.

Print Fix(3.1) da errore (sul mio sistema).
« Ultima modifica: 27 Gennaio 2026, 20:11:51 da Archimedes »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.288
  • Tonno verde
    • Mostra profilo
Re:Anomalia nella function Fix
« Risposta #5 il: 27 Gennaio 2026, 23:23:08 »
$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.
Codice: [Seleziona]
Print Fix(3.1)
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:
Codice: [Seleziona]
$ sudo apt-get purge gambas3*

$ sudo apt-get autoremove

Se non hai sudo puoi installarlo così:

Codice: [Seleziona]
$ 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):

Codice: [Seleziona]
$ 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:
« Ultima modifica: 27 Gennaio 2026, 23:27:07 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.288
  • Tonno verde
    • Mostra profilo
Re:Anomalia nella function Fix
« Risposta #6 il: 28 Gennaio 2026, 18:19:12 »
@Archimedes

volevo chiederti scusa per le mie prime risposte disattente  :-[

Però ti garantisco che ho riprovato i comandi che ti ho passato e su Debian 13 hanno funzionato bene (sempre che quello sia il tuo attuale SO).

È un momento così, che vuoi si invecchia...

Sono a disposizione per qualunque dubbio

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline kicco

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 1.751
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Anomalia nella function Fix
« Risposta #7 il: 28 Gennaio 2026, 18:33:18 »
È un momento così, che vuoi si invecchia...
... intanto governi sempre la nave...  :)
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.288
  • Tonno verde
    • Mostra profilo
Re:Anomalia nella function Fix
« Risposta #8 il: 28 Gennaio 2026, 18:50:32 »
È un momento così, che vuoi si invecchia...
... intanto governi sempre la nave...  :)

Speriamo di non essere in modalità Schettino...  ;D

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Archimedes

  • Gamberetto
  • *
  • Post: 24
    • Mostra profilo
Re:Anomalia nella function Fix
« Risposta #9 il: 28 Gennaio 2026, 19:41:01 »
Le scuse le devo dare io perche vi ho fatto perdere tempo inutilmente:
dopo 2 giorni tra una verifica e l'altra sono giunto alla soluzion più banale che ci sia:
progetto -> pulisci, compila tutto!
Quello che mi ha spiazzato è che la versione 3.20 non dava problemi.
Grazie Gianluigi per il supporto.

Offline kicco

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 1.751
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Anomalia nella function Fix
« Risposta #10 il: 29 Gennaio 2026, 08:40:13 »
Speriamo di non essere in modalità Schettino...  ;D
:D :D :D
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)