Unire 2 INT in Float

Ciao a tutti,
Da un ricevitore bluetooth ricevo due valori (INT) comando[0] e comando[1]
vorrei metterli dentro un Float in modo che comando[0] sia sempre la parte intera e comando[1] sia il decimale.
sto facendo prove unendoli cosi:

temp_psx = comando[1] |  comando[0] >>4;

ma la parte decimale viene persa

una semplice divisione

tempo=comando[1]+comando[0]/10.0

NO, il formato del float NON è fatto in quel modo, ma è secondo il formato IEEE 754 e quindi NON puoi mettere i bytes assieme in quel modo.

Guglielmo

Nel senso che 1 deve essere 0.1, e 32767 deve essere 0.32767 ?

Si avevo fatto così ma al variare, 1 o due cifre, del valore ottengo errori.
volevo evitare if

esempi limite comando[0] = 20 comando[1] =05 su float 20.05
comando[0] = 20 comando[1] =10 su float 20.1

comando[0] ha un valore compreso tra 0 e 120
comando[1] ha un valore compreso tra 0 e 99

Il modo più semplice e veloce, che funziona con tutti i valori, è quello di passare per delle stringhe di caratteri ...

... concatenando la parte intera (vista come stringa), il carattere "." e la parte decimale (sempre vista come stringa) ottenendo una stringa che somiglia a: "iiiiiii.ddddd" dopo di che convertire di nuovo la stringa ottenuta in numero float. :roll_eyes:

Io lo farei (ovviamente :grin:) usando le stringhe classiche del 'C' e le funzioni di <string.h> ... se lo si fa usando la classe String ... ci si riesce in una riga ... :wink:

Guglielmo

E allora la soluzione aritmetica è quella del post #2 solo diviso per 100 invece che 10.

... dipende ... se la parte decimale contiene 1, vuol dire 0.1 o 0.01 ? E, in ogni caso, come rappresenta i due valori? 1 per 0.01 e 10 per 0.1?

Ma allora perché non usare un solo int con la parte decimale moltiplicata per 10? Così con i valori massimi (120 e 99) si ha un solo numero intero 12099 che diviso 100 da il corretto valore in float.

Guglielmo

Si, così ha scritto nel post #6. Vuol dire che l'intero da 1 a 99 che rappresenta i decimali da 0.01 a 0.99 basta dividerlo per 100.

A parte l'errore nel post #1 di aver invertito l'indice dell'array tra il codice e la descrizione, il che, come dicono in altro forum, non fa che aumentare l'entropia :grin:

@Claudio_FF:
ok, allora ribadisco, ancora più semplice usare un solo intero come spiegato al post #9 :wink:

Guglielmo

Ho risolto con

float comando[6] = {};  // prima era int

temp_psx =  comando[0]+ (comando[1]/10);

ma ho messo un round ad una cifra nel trasmettitore del valore comando[1].
grazie a tutti

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.