Vorrei ottenere delle strighe di lunghezza fissa da usare poi su Serial.print per leggere agevolmente delle informazioni numeriche
Esiste un metodo generale per convertire in stringa un altro tipo di dato numerico, int, long, float, double, formattandolo come desiderato?
Per 'formattandolo come desiderato' intendo avere la possibilita' di visualizzare le cifre prima della virgola con un certo numero di cifre, stessa cosa per le cifre dopo la virgola
Esempio:
Supponiamo di voler ottenere una stringa composta da 6 cifre prima della virgola e 3 dopo la virgola
Dato un int = 150 visualizzare "000150,000"
Dato un int = -120 visualizzare "-000120,000" (questo e' l'unico caso di stringa piu' lunga)
Dato un float = 150.45 visualizzare "000150,450"
Dato un float = 150.4512 visualizzare "000150,451"
Dato un float = 150.4516 visualizzare "000150,452" (ultima cifra arrotondata)
Benvenuto,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione tutto il su citato REGOLAMENTO ... Grazie.
nid69ita
P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto.
sprintf oppure snprintf (più "sicura").
http://www.cplusplus.com/reference/cstdio/snprintf/
Con MCU con poca ram l'unica cosa che non è supportato è la formattazione dei float, ma si può ovviare con semplicità
// int snprintf ( char * s, size_t n, const char * format, ... );
char buffer [100];
snprintf ( buffer, 100, "The half of %05d is % 10d", 60, 60/2 );
Serial.println(buffer);
// pseudo float
float celsius = 25.5;
snprintf ( buffer, 100, "Temperatura: %03d.%d °C", (int)celsius, (int)(celsius * 10.0)%10);
Serial.println(buffer);
cotestatnt:
Con MCU con poca ram l'unica cosa che non è supportato è la formattazione dei float, ma si può ovviare con semplicità
Esatto, comunque si può anche usare la dtostrf():
// pseudo float
float celsius = 25.5;
dtostrf(celsius, 4, 1, buffer);
Serial.println(buffer);
docdoc:
Esatto, comunque si può anche usare la dtostrf():
Si ma non credo che con dtostrf() si riesce a fare anche il print dei "leading zeros" come richiesto dall'OP per quanto ne so.
cotestatnt:
Si ma non credo che con dtostrf() si riesce a fare anche il print dei "leading zeros" come richiesto dall'OP per quanto ne so.
Direttamente no, ha leading spaces per default ma dato che si imposta la dimensione in caratteri penso sia ininfuente avere spazi o zeri (almeno nelle mie applicaizoni non mi è mai capitato).
Eventualmente:
for (int i=0; buffer[i]==' '; ++i) buffer[i]='0';
This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.