float con printf

Salve,
immagino che sia un argomento trito e ritrito, ho cercato sia su questo forum, che su goggle, ho fatto anche diverse prove, ma non mi è chiaro.
Quando scrivo

float var = 1234.56789;
Serial.printf("Var = %2.4f",var);

il 4 sono le cifre dopo la virgola, invece il 2 cosa significa?

Ho fatto varie prove cambiando il 2 in numeri diversi, ma mi è sembrato che non abbia nessuna influenza.

Grazie

Sono curioso, come fai ad usare Serial.printf, a me non risulta che esista in Arduino!

Federico

Hai ragione con Arduino non va :slight_smile:
Stavo usando un ESP32.

Comunque la domanda resta :wink:

Ok, non ho modo di provarlo e conosco poco il C, ma mi sono fatto una certa idea,

prova con valori superiori a 9

float var = 1234.56789;
Serial.printf("Var = %10.2f",var);

Serial.printf("Var = %10.3f",var);

Serial.printf("Var = %10.4f",var);

Federico

Hai ragione con Arduino non va :slight_smile:
Stavo usando un ESP32.

Non conosco la toolchain ESP, per AVR la pritf su float è disabilitato e per abilitarlo bisogna aggiungere -lfprintf per includere la libreria in fase di compilazione.

Ciao.

onire:
il 4 sono le cifre dopo la virgola, invece il 2 cosa significa?

Ho fatto varie prove cambiando il 2 in numeri diversi, ma mi è sembrato che non abbia nessuna influenza.

Il numero di cifre totali punto compreso

Ma un semplice sguardo alla documentazione? Troppo difficile?
Provaci, vedrai che ci si mette poco....

Mi indicheresti il link alla documentazione?
Grazie

No
Alle volte è il caso di 'sbattersi' un poco, credimi

Grazie per il 'prezioso' suggerimento

Spulciando a questo indirizzo: esp32_Print.h si scopre che esiste un attributo GCC e che quindi la sintassi di printf è identica a quella documentato nella libreria C: http://www.cplusplus.com/reference/cstdio/printf/.

Ciao.

Grazie Maurotec,
avevo visto la pagina di cplusplus, ma non mi era molto chiara, perché avevo l'impressione che non si comportasse come scritto:
"Minimum number of characters to be printed. If the value to be printed is shorter than this number, the result is padded with blank spaces. The value is not truncated even if the result is larger."

La guarderò meglio.

Grazie ancora

La guarderò meglio.

Piccole differenze legate alla piattaforma (CPU 32-bit e 64-bit) dipendono dalla implementazione ovviamente, se le noti posta qui almeno rimane traccia.

Ciao.

onire:
avevo visto la pagina di cplusplus, ma non mi era molto chiara, perché avevo l'impressione che non si comportasse come scritto:

Nel frattempo ho testato il codice che ti ho inviato e funziona esattamente cosi

float var = 1234.56789;
Serial.printf("Var = %10.2f",var); //   1234.56
Serial.printf("Var = %10.3f",var); //  1234.567
Serial.printf("Var = %10.4f",var); // 1234.5678

Federico

Tutto bello, bella la boiserie, però concordo con Standardoil: il problema era risolvibile con un poco di ricerche e di sforzo, non mi piace mai dare la "pappa pronta". Ma vabbè....

Maurotec:
Non conosco la toolchain ESP, per AVR la pritf su float è disabilitato e per abilitarlo bisogna aggiungere -lfprintf per includere la libreria in fase di compilazione.

Ciao.

Ho seguito il thread, ma scusate, almeno per me non è chiaro, alla fine.
Anche compilando per Esp32 bisogna aggiungere -lfprintf ??

nid69ita:
Anche compilando per Esp32 bisogna aggiungere -lfprintf ??

No, o almeno, io non l'ho aggiunta nel test, forse viene aggiunta di default

Federico