stm32 LCD Float-Wert runden und Nachkommastellen kürzen

Gast #6654463
Lesenswert?
• ▲
▼
Hallo liebes Forum,

ich programmiere mit einem stm32f3discovery (auf welchem sich ein 
STM32F303 befindet) und verwende die standard peripheral library von 
STMikroelectronics. An diesem habe ich ein 2004-LCD über eine 
I2C-Schnittstelle angeschlossen.
Ich möchte nun Float-Werte an diesem Display anzeigen lassen.
Dafür habe ich mir eine Funktion geschrieben, welche mir den Float-Wert 
auf beliebige Nachkommastellen rundet. Anschließend wird dieser 
Float-Wert in Char-Werte umgewandelt und in ein Array geschrieben 
(mittels sprintf).

Das Runden und Anzeigen funktioniert, allerdings werden mir nach diesen 
Nachkommastellen weitere Nullen angezeigt.
Ein Beispiel mit 2 Nachkommastellen: Der float-wert -1.2355678 wird am 
LCD als -1.240000 angezeigt. Stattdessen möchte ich, dass am LCD nur 
-1.24 angezeigt wird.

Welche Tipps habe ihr, damit ich mein Problem möglichst effektiv lösen 
kann?
Der Code zum Runden sieht wie folgt aus:


1
void lcd_convert_float(float fvalue, uint8_t decimal_points)
2
{
3
  char string_value[16]={};        // hier wird der in char-umgewandelte Sensorwert gespeichert
4
  float factor = 1;
5
  uint8_t decimal_counter = decimal_points;
6

7
  if (decimal_counter > 2)    // maximal erlaubte Anzahl an Nachkommastellen: 2
8
    decimal_counter = 2;
9

10
  while(decimal_counter)
11
  {
12
    fvalue *= (float)10;
13
    factor *= 10;
14
    decimal_counter--;
15
  }
16

17
  int16_t runden = roundf(fvalue);
18
  fvalue = (float)runden / factor;
19

20
  sprintf(string_value,"%f", fvalue );    // umwandlung von float in char (char-wert wird ins Array geschrieben)
21
  lcd_print(string_value);                       // Wert auf LCD anzeigen
22
}
Gast #6654650
Lesenswert?
• ▲
▼
Zeno schrieb:
> Kann man die 2 nicht als Variable definieren? Bei Pascal wäre das kein
> Problem.

Das wäre mir neu. Auf jeden Fall hindert dich niemand daran, diesen 
Format-String dynamisch (wiederum mit sprintf) zu generieren bevor du 
die Zahl formatierst.
Gast #6654725
Lesenswert?
• ▲
▼
Stefan ⛄ F. schrieb:
> Das wäre mir neu. Auf jeden Fall hindert dich niemand daran, diesen
> Format-String dynamisch (wiederum mit sprintf) zu generieren bevor du
> die Zahl formatierst.

Den String mit strcat zusammensetzen sollte doch auch möglich sein.
Naja hier zeigen sich wieder mal die Unzulänglichkeiten von C bei 
Stringverarbeitung.
Bei Pascal(Delphi) gibt es da eine einfache Funktion (FloatToStrF()), 
die macht genau das was der TO haben will in einem Rutsch.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.