Eliminare la seconda cifra decimale di una variabile float/double

Ciao a tutti. Probabilmente questa questione é giá stata affrontata piú e piú volte, tuttavia non riesco ad uscirci, di nuovo.
Poniamo il caso che io abbia questo codice:

float alfa = 25.85763;

Serial.println(alfa);   //tutti i decimali, nessuno escluso

float beta = ((float)((int)((float)(alfa*10))))/10;        //porto alfa ad un decimale, salvandola su beta

Serial.println(beta);

lcd.setCursor(21,3);
lcd.print(beta);

La variabile beta, sia su Seriale che su lcd, dovrebbe avere un solo decimale. Invece, si presenta cosí:

Beta su lcd/Seriale: 25.80

Io lo zero finale non lo voglio, perché non mi serve e sovrascrive altro testo successivo sul display.
Ho letto la questione che esiste una libreria la quale permette di utilizzare una scrittura simile alla seriale, come:

lcd.print(Valore,1);

Tuttavia mi risulta impossibile utilizzarla, perché io sto lavorando su un display 40x4 non, e ripeto non i2c.

C'é un modo per togliere lo zero di mezzo? Grazie in anticipo per l'aiuto.

Puoi provare la funzione dtostrf

float alfa = 25.85763;
char beta[5];

dtostrf(alfa, 3, 1, beta);

lcd.setCursor(21,3);
lcd.print(beta);

In pratica tale funzione dovrebbe convertire la float alfa in char beta, 3,1 sta ad indicare che la char dovrà contenere 3 numeri, e 1 decimale.

ma dare una scorsa al reference non si fa più?
print() è una e comune a tutti gli stream
fare print(variabilenumerica, numerodicifre) è addirittura tra gli esempi del reference
inoltre vedo una certa mancanza di "fantasia": anche ammesso che non fosse possibile ridurre il numero di cifre significative, trattandosi di stampa su LCD basterebbe "dopo" riposizionare il cursore e metterci un bello spazio
pensare "easy", sempre
dare una letta a "aiutateci ad aiutarvi", sempre

1 Like

Standardoil:
anche ammesso che non fosse possibile ridurre il numero di cifre significative, trattandosi di stampa su LCD basterebbe “dopo” riposizionare il cursore e metterci un bello spazio

In questo caso non potrebbe:

Io lo zero finale non lo voglio, perché non mi serve e sovrascrive altro testo successivo sul display.

Ma a questo punto non sappiamo se il numero di cifre PRIMA della virgola è sicuramente costante…

Basterebbe stampare il numero "temporalmente" prima del testo, che così sovrascriverebbe il numero, evitando anche di dover usare uno spazio. Sempre poca fantasia vedo

e se anche il numero di cifre intere è incostante abbiamo anche poca analisi oltre che poca fantasia

Standardoil:
ma dare una scorsa al reference non si fa più?
print() è una e comune a tutti gli stream
fare print(variabilenumerica, numerodicifre) è addirittura tra gli esempi del reference
inoltre vedo una certa mancanza di "fantasia": anche ammesso che non fosse possibile ridurre il numero di cifre significative, trattandosi di stampa su LCD basterebbe "dopo" riposizionare il cursore e metterci un bello spazio
pensare "easy", sempre
dare una letta a "aiutateci ad aiutarvi", sempre

Ti dico subito perché entrambe le tue idee non vanno bene:

Print: come già detto nel primo post, ho provato e non funziona, perciò è subito da scartare

Stampare uno spazio sul secondo decimale: non si può, e ti dico subito il perché:
Al posto del secondo decimale, ci deve andare il simbolo del grado, che effettuo con char(223)
Se anche andassi a stampare il simbolo per nascondere il secondo decimale, non funziona: la stampa non è nitida e pulita, perché c'è un continuo sfarfallio dovuto al cambio tra numero e simbolo.

Proverò il metodo del codice descritto nel secondo post, e vi farò sapere.

GianlucaB:
Puoi provare la funzione dtostrf

float alfa = 25.85763;

char beta[5];

dtostrf(alfa, 3, 1, beta);

lcd.setCursor(21,3);
lcd.print(beta);




In pratica tale funzione dovrebbe convertire la float alfa in char beta, 3,1 sta ad indicare che la char dovrà contenere 3 numeri, e 1 decimale.

grazie mille per l'aiuto, funziona. All'inizio mi ero preoccupato, dato che, scrivendo "dtostrf" non si evidenziava il testo, peró ha compilato e caricato tranquillamente, risolvendomi il problema.
Grazie ancora per l'aiuto.

Standardoil:
Basterebbe stampare il numero "temporalmente" prima del testo, che così sovrascriverebbe il numero, evitando anche di dover usare uno spazio. Sempre poca fantasia vedo

Dipende dal testo: se è un testo fisso, auspicabilmente lo scrive una sola volta all'inizio.

Purtroppo, come spieghi efficacemente in "aiutateci ad aiutarvi", è difficile aiutare senza sapere cosa si vuole ottenere.

Lo stesso vale per l'altro discorso:

e se anche il numero di cifre intere è incostante abbiamo anche poca analisi oltre che poca fantasia

Senza sapere da dove viene quel numero, è impossibile sapere se il numero di cifre intere è costante.
Il postatororiginale ci ha dato quel numero così, senza indicarne l'origine.

paulus1969:
Dipende dal testo: se è un testo fisso, auspicabilmente lo scrive una sola volta all'inizio.

Purtroppo, come spieghi efficacemente in "aiutateci ad aiutarvi", è difficile aiutare senza sapere cosa si vuole ottenere.

Lo stesso vale per l'altro discorso:

Senza sapere da dove viene quel numero, è impossibile sapere se il numero di cifre intere è costante.
Il postatororiginale ci ha dato quel numero così, senza indicarne l'origine.

Il numero e' di una misura di temperatura, dove variano sia i decimali che le unita'

Misura ambientale… se è esterna potresti avere da uno a tre caratteri per la parte intera se pensi che potresti anche andare sotto zero.

-11

-6

0

4

20