Decimali in Rh e Gh

Facendo un arrotondamento in base al valore massimo delle coordinate prese in considerazione.
Se il tuo valore più alto non supera la decina, allora potrai arrotondare a 14, se, invece il valore supera le 10.000 unità ma è inferiore a 100.000 allora arrotondi a 10 cifre…
Torno a ripetere, tutto questo, legato alla modellazione, non ha alcun senso… quando la valutazione è nell’ordine di grandezza della tolleranza del modello, sei già a posto (questo vuol dire che quando arrotondi a 5 cifre oltre allo zero, non avrai mai problemi di valutazione se due punti si possano dire identici o no…).
Mi pare che tutta la questione sia legata a voler spezzare il capello in quattro… quasi come se qualcuno volesse utilizzare il pi greco per intero… ma con quale scopo?

2 Mi Piace

Per ottenere stringhe da numeri ci vuole la formattazione.
Usa l’operatore % o il metodo format()

mi sa che dovrò eseguire un loop sulle 3 coordinate per formattarli giusto?

Se vuoi ottenere 3 stringhe separate forse il loop e’ il modo piu’ semplice.

in una unica stringa ma ogni coordinata deve avere lo stesso numero di caratteri, mettiamo 5 caratteri in totale, quindi anche se è 0.0 mi deve tornare 0.000 vale anche il punto oppure il segno -

Ti consiglierei di usare format().
Io lo conosco poco, sono abituato al metodo vecchio … :confused:
Se vuoi provare, poi se ci sono problemi fatti vivo. :slight_smile:

Emilio per adesso uso questo metodo, spero che non mi faccia sorprese :smile:

print str(x[0]).ljust(20, ‘0’)+“,”+str(x[1]).ljust(20, ‘0’)+“,0”

ho deciso di usarlo direttamente collegato al MdS dove i decimali variano dai 14 a 15 cifre
nella stringa ho messo 20 caratteri, quindi credo che teoricamente dovrebbe bastare :+1:

Nel caso ti interessi, il libro di Beri parla di format() da pag. 112.

:+1:

non so se quello che intendevi sul panel era questo:
ho collegato un panel output del MdS essendo che
avevo notato output ritorna sempre 10 decimali

quindi sto pensando di usarlo per formattare in ingresso a 10 decimali sia la lista punti3d, MdS ecc

ritiro quanto detto, da prove fatte i decimali variano

Ripeto.
Per quanto ne so, in Python ci sono solo 2 modi di formattare:
L’operatore %
Il metodo format()

Veramente nel Python attuale ci sono anche le F-strings.
… Ma nel paleo-Python che usa Rhino ovviamente no … :roll_eyes:
:smile:

Comunque quello che c’e’ funziona bene :slight_smile:

non avevo dubbi :slight_smile:
avevo pensato che il panel arrotondasse in automatico a 10 decimali
tutte le cifre sempre, mentre invece non’è così. li ho contati con il len.

ma Emilio che dici, se conerto input delle coordinate in binario
e poi riconverto a mio piacere, che dici il risultato va bene?

Come converti ?
E tra la prima e la seconda conversione, cosa ci fai al numero ?
“Va bene” in che senso ?

Inoltre …
Il numero e’ gia’ memorizzato in binario, non puo’ essere altrimenti nella memoria del PC.
Puoi ottenere il testo con il numero in decimale o usando altre basi, ma poi cosa ci fai ?

ottenere il “testo” con il numero decimale?

risultato delle coordinate del MdS:
30.859202873416,22.738352054503

queste invece sono selezionando indice:
30.8592028734
22.7383520545

però se inserisco il valore del MdS in una lista:
[30.85920287341601, 22.738352054503004]

per lo stessa coordinata in input senza far modifiche, mi ritrovo con 3 numeri diversi (mi snerva :exploding_head:)

A me sembra sempre il discorso che abbiamo fatto in precedenza.
Provo a rifarlo (meglio, possibilmente … :smile:) e dimmi cosa non e’ chiaro.

Se come dici l’input e’ lo stesso, allora il numero e’ sempre quello, non sono numeri diversi.

Partiamo da qui:

Quando vedi scritto sullo schermo “20”, stai guardano un TESTO composto dai caratteri “2” e “0”.
Il programma ricava quel testo da un NUMERO che vale venti, ma lui in memoria ce l’ha scritto in binario.
Per lui il numero e’ 2^4+2^2, ma per farsi capire da noi deve trasformarlo in decimale, e ottiene 2*10^1 e poi trasformare il decimale in testo da scrivere sullo schermo, e allora ottiene la stringa “20”.
E quello ci fa vedere.

E finche’ il numero da scrivere e’ 20, non ci sono problemi.
Ma a volte il numero e’ un numero decimale.

I numeri decimali sono di nuovo scritti in binario (non c’e’ altro modo, visto che i bit possono valere solo 0 o 1).

Hai presente quando si scrivono i numeri tipo 2.5e4 per indicare 25000 ?
Indica un numero (2.5) molitplicato per una potenza di 10 (4).
Bene, in memoria i numeri decimali sono scritti allo stesso modo, ma in binario anziche’ in decimale.

Quindi in memoria sono scritti un numero (chiamato mantissa) e un esponente di 2.
La mantissa e’ un numero tra 1 e 2 scritto con 53 bit, l’esponente e’ un numero scritto con 11 bit.
Ma questo non ci deve preoccupare.
Ci pensa un programma, di nuovo, a convertire il numero binario in decimale e poi a convertire il decimale in stringa per scriverlo a video.

Solo che, essendo un numero decimale, bisogna decidere con quanti decimali scriverlo.
Come dicevamo l’altra volta, se il numero lo formatti tu, decidi tu quanti decimali usare.

Ma se lascia fare ai componenti di GH, loro fanno quello gli pare e possono formattare una volta con 10 decimali, un’altra con 12 oppure con 15.
Non so perche’ il numero di decimali varia, ci saranno dei buoni motivi, ma non mi preoccupa.
Come diceva Lucio, per i calcoli pratici in Rhino 4 o 5 decimali bastano e avanzano di solito.
E se invece vuoi vedere un numero preciso di decimali, basta che inserisci un piccolo script

Se vuoi puoi anche parametrizzare il numero di decimali mostrati e attaccare uno slider.

Non so se ci siano altri modi per formattare in GH, oltre agli script. :confused:
Comunque gli script funzionano.

Esempio pratico: ho un numero che vale 1/3.
Io posso formattarlo in quanti modi voglio:

0.3
0.33
0.333
0.333333333

ecc.
Ma il numero e’ sempre lo stesso.

si Emilio, come dici il discorso è lo stesso, però per come la vedo io sono due casi diversi

nel senso, l’altra volta si confrontavano due cifre diverse, che venivano formattate in modo diverso,
adesso invece si tratta della stessa cifra, “usato in modi diversi”, restituisce un risultato diverso.

si, comprendo che il numero è sempre lo stesso, ma temo che queste diversità possono
far non coincidere i numeri in determinate circostanze, come quando le converti in stringhe
poi la stringa la confronti con la stessa cifra inserita in una lista che riporta i decimali diversi

(quindi a questo punto converrebbe arrotondare già a priori tutte le cifre oppure solo nel confronto)
vabbè mo vedo un pò meglio la situazione, può darsi che sto facendo solo castelli in aria per nulla.

un saluto e gazie per l’ennesima spiegazione :wink:

Esatto. :+1:
Per questo e’ importante ricordarsi che l’arrotondamento esiste e tenerlo sotto controllo. :slight_smile:
Conviene fare come Rhino. Lui stabilisce una tolleranza (che noi possiamo modificare) e i confronti li esegue tenendo conto di quella tolleranza.