- Messaggi: 41
- Ringraziamenti ricevuti 1
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
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
- Autore della discussione
- Senior Member
Riduci
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
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
- Platinum Member
Riduci
Di più
- Messaggi: 527
- Ringraziamenti ricevuti 86
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
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.
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 adesso ho messo MCLR a massa ed è tornato tutto ok...o almeno spero
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 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
- Platinum Member
Riduci
Di più
- Messaggi: 527
- Ringraziamenti ricevuti 86
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
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
Moderatori: Mauro Laurenti, Pinna, StefA, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.