visualizzare interi

9 Anni 8 Mesi fa - 9 Anni 8 Mesi fa #21 da nonso
Risposta da nonso al topic visualizzare interi
ciao Mauro
supponiamo di avere il float 9,8765.... e mi interessano due cifre decimali oltre all'intero.
allora prendo l'intero del mio float
int part_int = (int)9,8765....//ottengo 9
ora prendo i due decimali senza approssimare poichè non mi serve tanta "precisione"
int decim = (int))((9,876...- part_int)*100);//ottengo 87 che sono i miei due decimali

ho sottratto al mio float la parte intera
ora scrivo
LCD_write_intero(part_int,2 ,...)
LCD_write_char(',);//metto la viorgola per i decimali
LCD_write_int(decim,2,...);scrivo i decimali
Alla base c'è il casting di tipo
infine ho visualizzato il mio float con i due decimali
tante istruzioni ma non ho saputo fare di megliio
Non ridete..
ciao
Ultima Modifica 9 Anni 8 Mesi fa da nonso.
Ringraziano per il messaggio: alfa75

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • nonso
  • Senior Member
  • Senior Member
Di più
9 Anni 8 Mesi fa #22 da alfa75
Risposta da alfa75 al topic visualizzare interi
ciao nonso
il tuo metodo funziona benissimo,ma se vuoi snellire il codice è utilizzare meno risorse visto che il casting ne porta via un pò puoi fare anche così
int parte_intera = (9.8765/1000);
int parte_decimale = (9.8765%1000);
LCD_write_integer(parte_intera,...);
LCD_write_char(",");
LCD_write_integer(parte_decimale,...);
così ottieni 3 decimali dietro la virgola

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • alfa75
  • Avatar di alfa75
  • Platinum Member
  • Platinum Member
Di più
9 Anni 8 Mesi fa #23 da Mauro Laurenti
Risposta da Mauro Laurenti al topic visualizzare interi
@nonso
l'idea e' direi che ottima! :)

sprintf, sebbene faccia il tutto in un passo convertendo in stringa, e' piuttosto "pesante" visto che sprintf e' una funzione generica. La sua esecuzione e' lenta e richiede molta memoria flash. Non l'ho quantificata ma sicuramente molto piu' di quella necessaria per la tua soluzione.

@alfa
non ho ben capito le due istruzioni.
In particolare la funzione % puo' essere applicata solo ad interi.
Non ho provato il codice ma mi aspetto che il compilatore possa reclamare.

int parte_intera = (9.8765/1000);
int parte_decimale = (9.8765%1000);


Saluti,

Mauro
Ringraziano per il messaggio: alfa75, nonso

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
9 Anni 8 Mesi fa - 9 Anni 8 Mesi fa #24 da alfa75
Risposta da alfa75 al topic visualizzare interi
Mauro hai ragione
ho tentato di convertire un float con un int
mi sono ingannato da solo ricordandomi di aver utilizzato quel codice per leggere su display il valore di una tensione letta con l'adc tralasciando il fatto che il valore in uscita dell'adc è un intero e che moltiplicandolo per la sua risoluzione diventa una variabile intera di tipo long.
ho avuto un corto circuito celebrale :pinch: adesso ho messo MCLR a massa ed è tornato tutto ok...o almeno spero :)
Ultima Modifica 9 Anni 8 Mesi fa da alfa75.

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • alfa75
  • Avatar di alfa75
  • Platinum Member
  • Platinum Member
Di più
9 Anni 8 Mesi fa #25 da Mauro Laurenti
Risposta da Mauro Laurenti al topic visualizzare interi
...io ero in modalità Debug passo passo...! :)

Saluti,

Mauro

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
Moderatori: Mauro LaurentiPinnaStefAMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login