Autore Topic: E' normale che Round non arrotondi?  (Letto 4094 volte)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
E' normale che Round non arrotondi?
« il: 10 Febbraio 2014, 00:20:47 »
Ho notato una cosa che forse è normale ma ne vorrei se possibile conferma da voi:

Se inserisco nella funzione aritmetica Round un'espressione tipo: Round(Paint.Font.Size * 1.3441,-2) invece di ottenere un numero con due decimali ottengo il numero originale e cioè non arrotondato. In effetti nella guida si parla di numero arrotondato, però nella mia ingenuità credevo funzionasse anche così. :-\

Grazie dell'attenzione
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: E' normale che Round non arrotondi?
« Risposta #1 il: 10 Febbraio 2014, 01:06:31 »
Come premessa rinvio ad una essenziale, ma efficace ed esaustiva, spiegazione scritta da md9327 sulla funzione Round():
http://www.gambas-it.org/smf/index.php?topic=1865.msg20789#msg20789


Se io scrivo un semplice codice (di cui riporto appresso la parte che ci interessa) rifacendomi al tuo caso:
Codice: gambas [Seleziona]

.......

    Paint.Font.Size = 12
 
 
    Print Paint.Font.Size * 1.3441
   
' Viene chiesto alla funzione "Round()" di arrotondare il secondo numero decimale:
    Print Round(Paint.Font.Size * 1.3441, -2)

End

in console ottengo questi risultati:

16,1292  senza funzione Round();
16,13  con la funzione Round().

Quindi funziona.  :-\
« 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 Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: E' normale che Round non arrotondi?
« Risposta #2 il: 10 Febbraio 2014, 10:09:17 »
Come premessa rinvio ad una essenziale, ma efficace ed esaustiva, spiegazione scritta da md9327 sulla funzione Round():
http://www.gambas-it.org/smf/index.php?topic=1865.msg20789#msg20789
Se io scrivo un semplice codice (di cui riporto appresso la parte che ci interessa) rifacendomi al tuo caso:
Codice: gambas [Seleziona]
......
    Paint.Font.Size = 12
    Print Paint.Font.Size * 1.3441   
' Viene chiesto alla funzione "Round()" di arrotondare il secondo numero decimale:
    Print Round(Paint.Font.Size * 1.3441, -2)
End

in console ottengo questi risultati:

16,1292  senza funzione Round();
16,13  con la funzione Round().
Quindi funziona.  :-\
:-\
Beato te a me no ora vado a scrivere un piccolo esempio e lo posto
ciao
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: E' normale che Round non arrotondi?
« Risposta #3 il: 10 Febbraio 2014, 11:01:36 »
Quando devi allegare un file, dopo aver cliccato su "Rispondi", devi cliccare in basso a sinistra su "Opzioni aggiuntive...", quindi sul tasto virtuale "Browse...".

Ad ogni modo, puoi anche solo inserire nella tua risposta il codice (...possibilmente solo la parte essenziale !), usando il tasto in alto a destra "Evidenzia la sintassi".
« 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 Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: E' normale che Round non arrotondi?
« Risposta #4 il: 10 Febbraio 2014, 11:05:23 »
 :-[

(secondo tentativo)
scusa vuott ma non capisco come funzionano gli inserimenti delle foto e dei file non so se è colpa loro ma se tento di citarti (era già successo prima ma non me ne ero accorto)  nel mio sommario della discussione la citazione del tuo post mi appare ripetuta parecchie volte.

Spero ci siano gli allegati che sono: l'ultimo esempio che avevo postato nella discussione Differenze fra testo disegnato e testo scritto con l'aggiuta di MessageBox e Print, più la foto dei risultati nella mia console.
Io sto usando:
3.5.99.1+svn20140209+build18~ubuntu13.10.1
ciao e grazie
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: E' normale che Round non arrotondi?
« Risposta #5 il: 10 Febbraio 2014, 12:28:31 »
Ho dato un'occhiata al codice che hai allegato, i cui risultati in console sono coerenti con quelli visibili nell'immagine che hai allegato.

Il tuo codice mostra 5 risultati in rispettivi MessageBox. Al riguardo faccio notare che all'interno della Sub DisegnoX:
* il valore mostrato nel primo Message non è soggetto alla funzione Round(), in quanto non previsto;
* il valore mostrato nel secondo Message non è soggetto alla funzione Round(), in quanto non previsto;
* il valore mostrato nel terzo Message non è soggetto alla funzione Round(), perché non v'è passaggio nella riga precedente con l'istruzione IF ;
* il valore mostrato nel quarto Message non è soggetto alla funzione Round(), perché non v'è passaggio nella riga precedente con l'istruzione IF .


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

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: E' normale che Round non arrotondi?
« Risposta #6 il: 10 Febbraio 2014, 16:55:06 »
Ho dato un'occhiata al codice che hai allegato, i cui risultati in console sono coerenti con quelli visibili nell'immagine che hai allegato.

Il tuo codice mostra 5 risultati in rispettivi MessageBox. Al riguardo faccio notare che all'interno della Sub DisegnoX:
* il valore mostrato nel primo Message non è soggetto alla funzione Round(), in quanto non previsto;
* il valore mostrato nel secondo Message non è soggetto alla funzione Round(), in quanto non previsto;
* il valore mostrato nel terzo Message non è soggetto alla funzione Round(), perché non v'è passaggio nella riga precedente con l'istruzione IF ;
* il valore mostrato nel quarto Message non è soggetto alla funzione Round(), perché non v'è passaggio nella riga precedente con l'istruzione IF .

 :-[
Hai ragione il tutto era un po confuso e per giunta dopo il ciclo di rimpicciolimento la scritta non l'avevo passata al Round però se poi davi la stampa vedevi tutti gli arrotondamenti. Se fossi però passato prima dalla stampa ottenevi un bug (mi ero dimenticato di passare la 'misura video' anche qui, e le prove le facevo disegnando sempre prima... cosa vuoi che ti dica, però ti assicuro che se mi danno del furbo mi offendo).
Come è difficile essere precisi...

Una cosa non capisco se io faccio  Paint.Font.Size = Round(Paint.Font.Size * 1.3441, -2) poi non devo controllare il valore restituito da  Paint.Font.Size per sapere se la funzione “Funziona”  :-\
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: E' normale che Round non arrotondi?
« Risposta #7 il: 10 Febbraio 2014, 17:10:43 »
Una cosa non capisco se io faccio  Paint.Font.Size = Round(Paint.Font.Size * 1.3441, -2) poi non devo controllare il valore restituito da  Paint.Font.Size per sapere se la funzione “Funziona”

Non capisco se è una domanda o un'affermazione.
« 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 Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: E' normale che Round non arrotondi?
« Risposta #8 il: 10 Febbraio 2014, 17:18:03 »
Una cosa non capisco se io faccio  Paint.Font.Size = Round(Paint.Font.Size * 1.3441, -2) poi non devo controllare il valore restituito da  Paint.Font.Size per sapere se la funzione “Funziona”

Non capisco se è una domanda o un'affermazione.

E' una domanda con 3 punti interrogativi ed esclamativi, però l'ho detto che è difficile essere precisi... :)
« Ultima modifica: 10 Febbraio 2014, 17:24:36 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: E' normale che Round non arrotondi?
« Risposta #9 il: 10 Febbraio 2014, 17:53:21 »
ma... non capisco cosa potrei dirti.... se intendi verificare, poni delle istruzioni per la verifica. Cosa posso dirti ?  :-\
« 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 Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: E' normale che Round non arrotondi?
« Risposta #10 il: 10 Febbraio 2014, 18:08:58 »
ma... non capisco cosa potrei dirti.... se intendi verificare, poni delle istruzioni per la verifica. Cosa posso dirti ?  :-\

Se è lecito il codice Paint.Font.Size = Round(Paint.Font.Size * 1.3441, -2) allora in base al mio esempio quello denominato ProvaGian_2 Gambas non funziona.  :-\

Non saprei come meglio spiegarmi  :'(
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: E' normale che Round non arrotondi?
« Risposta #11 il: 10 Febbraio 2014, 19:10:39 »
quello che credo vuott ti stesse dicendo è che se nel tuo codice scrivi:
Codice: [Seleziona]
 If sDevice = "Stampante" Then Paint.Font.Size = Round(Paint.Font.Size * F_GAMBERETTO_STAMPA, -2)
    Print Paint.Font.Size   
    Message(Paint.Font.Size)
il round entra in funzione solo quando l' espressione nell' IF è vera , ovvero quando il device è stampante altrimenti il round non viene eseguito e quindi non viene eseguito l' arrotondamento

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: E' normale che Round non arrotondi?
« Risposta #12 il: 10 Febbraio 2014, 19:45:48 »
quello che credo vuott ti stesse dicendo è che se nel tuo codice scrivi:
Codice: [Seleziona]
 If sDevice = "Stampante" Then Paint.Font.Size = Round(Paint.Font.Size * F_GAMBERETTO_STAMPA, -2)
    Print Paint.Font.Size   
    Message(Paint.Font.Size)
il round entra in funzione solo quando l' espressione nell' IF è vera , ovvero quando il device è stampante altrimenti il round non viene eseguito e quindi non viene eseguito l' arrotondamento
:-\
Si avete ragione ma dopo, successivamente, ho postato del codice meno confuso (ProvaGian_2) che ingloba nell'If anche Message e Print. E comunque anche prima (ProvaGian) usando le tue precauzioni, cioè stampando su file, appena uno usava stampa otteneva i valori da me postati.
L'unica cosa che posso aggiungere per spiegarmi meglio è che chiamare passo 3 stampa e passo 4 stampa, non spiega nulla il passo 3 stampa è l'adeguamento per la stampante del font.size ridimensionato per rientrare nel rettangolo e il passo 4 stampante è praticamente il ritorno al size originale.
Forse occorreva un esempio più semplificato ma siccome era codice di cui avevamo discusso in precedenza, ed era quello che mi ha, per così dire, ispirato la domanda...

Il punto comunque rimane questo è o non è lecito passare alla funzione ROUND un'espressione? E se è lecito, è lecito interrogare il codice come faccio io:
Paint.Font.Size = Round(Paint.Font.Size * 1.3441, -2)
Print Paint.Font.Size

perché se questo è giusto allora il mio Gambas non funziona o meglio non arrotonda.  ???
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: E' normale che Round non arrotondi?
« Risposta #13 il: 10 Febbraio 2014, 19:51:59 »
è lecito e a me funzionante

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: E' normale che Round non arrotondi?
« Risposta #14 il: 10 Febbraio 2014, 20:00:40 »
quello che credo vuott ti stesse dicendo è che....
...il round entra in funzione solo quando....

fsurfing: santo e benedetto !  
« Ultima modifica: 10 Febbraio 2014, 20:02:55 da vuott »
« 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. »