Formato numeri

lo so che ho detto di averci messo una pietra sopra, ma questa cosa mi fa :exploding_head:

40-3

nella lista del componente “float” contiene una serie di valori numerici di cui 20 valori 40
comparo con il componente “=” con il valore float 40 ma la somma del risultato è di 12

nella parte superiore ho fatto una controprova che conferma quanto scritto sopra
e la somma conferma le 20 unità 40 a differenza della somma 12 nella parte inferiore
i valori sono tutti float, quindi mi chiedo come mai succeda questo? sbaglio qualcosa?

Visto così non sembra ci siano errori, tuttavia non conoscendo il contenuto dei vari elementi è difficile fare delle considerazioni.

come si può vedere dai pannelli selezionati “verdi” sono tutti float
è una lista di punti estrapolando per fare una prova solo l’asse X
nel rettangolo rosso puoi vedere il raggruppamento dei valori

Se puoi, posta la definizione, invece che l’immagine.
Così che anche qualcun’altro possa dare un parere.

1 Mi Piace

Infatti non si capisce niente.
Ma quale sarebbe il problema ?

Se non ho capito male il problema è:
c’è una lista che contiene diversi elementi di cui 20 sono identici ma la definizione di Salvio ne rileva solo 12.

1 Mi Piace

40-5

ciao Emilio
nello spazio 1 il totale dell’elemento 40 è 12
nello spazio 2 il totale dell’elemento 40 è 20 (cioè risultato corretto)

ho ordinato tutti i risultati, è come si nota nel panel i numeri 40 ne sono 20
e nel secondo panel (confrontando l’indice) sono tutti e 20 dei float
come anche il num 40 di confronto in basso a sinistra

preciso che il problema viene risolto in due modi: o usando il componente integer
oppure inserendo all’uscita della lista, l’espressione round(x,3) “credo sia la strada più corretta”

ps qualcuno sà, se il componente member index converta i valori in testo?

esatto Leopoldo

PS: In pratica si, se utilizzi l’uscita come testo.
img1

infattio avevo il dubbio, che con i componenti set ricordavo che trattavano stringhe di testo
quindi avevo ipotizzato una conversione interna del componente.

ma questi problemi di arrotondamento in Gh già ne avevo parlato tempo fa
ma allepoca se non erro, nella lista compariva una differenza visiva del tipo:
una parte dei numeri veniva visualizzata come intera 1 e l’altra parte come float 1.0 ma entrambe float
ovviamente tutti elementi della stessa lista.forse queste differenze è dovuta di codici diversi nei componenti

Ciao Salvio

( e grazie Leopoldo per la risposta ! )

Dalla definizione che NON posti non riesco a capire granche’ …

Ma in generale, la cosa non ‘corretta’ (dal nostro punto di vista) e’ testare l’uguaglianza tra due float.

I “Panel” di grasshopper non dicono tutto. Anzi, principalmente danno solo indicazioni di massima.
Fare ragionamenti solo tramite screenshot è veramente poco utile. Sicuramente inefficiente.
Puoi caricare il file .gh ?

ragazzi scusate se rispondo solo adesso,

spero che mi perdoniate se non posto la definizione,
nel caso se riesco a replicare in altro modo vi aggiorno

nel frattempo dopo la risposta di Emilio: (che mi ha fatto riflettere su un ragionamento importate)

sono andato a controllare i dati e anche li non ho trovato nulla di strano sono tutti numeri come da foto,
tranne una cosa, se faccio una qualsiasi azione nella casella “Set Multiple Numbers” premere invio ecc
il risultato della lunghezza lista che prima dava 12 adesso si è aggiornato e riporta il totale giusto cioè 20

Leopoldo, come puoi vedere dalla foto ho fatto anche un secondo controllo
in pratica non’é come si era ipotizzato, infatti se si collega a M una Stringa mentre in S dei Float torna 0
mentre invece con il componente Equals in questo caso anche se input è una stringa viene convertito

:pray:

se può interessare, il link che ho postato nel forum americano è collegato a questo
sembra che il problema originale sia come viene creata/estrapolata la superficie
@inno nella sua definizione usa PlaneSrf e non c’é il problema di convertire i valori

come sottolineato da @RiccardoMajewski , il Panel ti mostra qualcosa ma non tutto :slight_smile:

in particolare, prendendo dal tuo esempio ricostruito un po’ alla meno peggio, se prendi i valori che il panel ti mostra come integer (nel senso che non venendo rappresentati con punto+decimali sembrano essere integer, ma in verità non lo sono) e li moltiplichi per 10, 100, 1000 and so on, cominciano a venir fuori i “decimali occulti” che rovinano tutto :slight_smile: (riposto dal forum us)


weird_compare_values_Re.gh (16,1 KB)

succo della discussione: non usare mai equal con i float :slight_smile:

1 Mi Piace

infatti anche cambiando i decimali ritorna visualizzato sempre interi

credo che Emilio avesse capito tutto sin dall’inizio :bowing_man: :bowing_man:

dopo quanto detto, non per discolparmi, ma se mi consentite togliermi una freccia a mio favore

@inno ti rispondo qui anche perché è collegato a come è nato questo post (nel caso chi vuole verificare)
come mostravo nel mio messaggio n°13, se si prendono i valori del PointToNumber, e li si internalizzano a NumberDecimal, verificando i valori nel “Set Multiple Numbers” si può constatare che sono tutti interi
ma restituiscono lo stesso il problema, a meno che non “si prema invio ecc” nella casella di testo
(sembra che i valori decimali rimangano memorizzati in latenza fino a quando non si aggiornino)

non proprio :slight_smile:
quando vai “in sovrimpressione” con il puntatore del mouse su un output, GH poppa la finestrella gialla con i valori che l’output stesso contiene, proprio come se avessi temporaneamente collegato quell’output a un Panel per vederne il contenuto

quella finestrella segue tutte le “regole” del Panel, ovvero se un float contiene abbastanza decimali che son tutti zeri, allora te ne mostra solo la parte intera

questo significa che, quando colleghi un panel all’output, tutti quei float che sono 50.000000000000001217 (per esempio) te li fa vedere come “50 e basta”, ma in realtà è solo questione di rappresentazione numerica: il valore di quel “50 e basta” è in verità sempre “50.000000000000001217”

in GH, a meno che tu non forzi un valore ad essere int (ovvero numero intero, punto, di cui non esiste la parte decimale: non è che è punto zero zero zero… non esiste il punto, tipo se si parla di indici) questo non sarà mai int “nativo”

anche uno slider settato sui soli Naturali ti outputta dei float :slight_smile:

quindi l’output di PointToNumber outputta dei floats, sebbene il Panel ti mostri solo la parte intera dei float perchè la parte decimale differente da 0 è abbastanza lontana

per la domanda non chiesta “ma perchè generando dei punti su quella faccia perfettamente piana sul piano YZ ottengo dei punti che sembra non giacciano su quello stesso piano YZ???” penso sia tutta una questione di tolleranze (infatti i decimali hanno molti zeri dopo la virgola…) il punto di interesse rimane comunque di non comparare i float :smiley:

2 Mi Piace

@inno come dicevo, intendevo una volta internalizzati i valori all’interno della casella di testo
riscontrerai tutti numeri interi e si presenta il problema, ma avendo accortezza di fare questa prova:
calcelli un valore qualsiasi oppure in fondo alla lista elimini o aggiungi un rigo tutto funziona perfettamente
(quindi i valori internalizzati che prima rimanevano float, dopo questa prova vengono visti come interi)

secondo me c’è un discorso da fare a monte :slight_smile: per non far confusione :slight_smile:

una cosa sono gli int, ovvero che non possiedono una parte decimale, come gli indici di una lista, tipo il numero schietto “3” o “921”

se parliamo di float, tipo il valore “3.000” questo ha una “parte intera” uguale a 3, ma non è un intero :+1:
possiam dire che 3.000 sia “un numero tondo” nel senso che ha decimali che son tutti zeri

secondo me quando dici:
quindi i valori internalizzati che prima rimanevano float, dopo questa prova vengono visti come interi
intendi dire:
quindi i valori internalizzati che prima rimanevano float, dopo questa prova vengono visti ancora come float, ma tutti numeri tondi


quello che viene fatto passare dentro un Panel, in uscita del Panel stesso è sempre String
in particolare, l’uscita String è quello che viene visualizzato all’interno del Panel stesso

quindi: entrano Float → Panel (diventano String) → output Panel (sono diventati String)

nel passaggio nel Panel, la trasformazione Float → String fa perdere le informazioni decimali che erano contenute nel Float (perchè il Panel stesso le trimma via, non visualizzandole)

esatto sicuramente questa descrizione che hai dato è più idonea.

fermo restando di aver compreso, tutti i discorsi che hai evidenziato
sottolineavo il fatto “particolare” bisogna fare quell’operazione per resettare i valori nel componente float
adesso che mi viene in mente ho spesso riscontrato lo stesso problema con il componente Cluster In/Out.