mikrocontroller.net

Forum: Compiler & IDEs Double to String C


Autor: Marcel Ofitsch (ofma03310)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag,
Es gibt zwar schon genügend Threads über dieses Thema, und ich habe auch 
schon diverse Codezeilen gelesen, jedoch manche nicht ganz verstanden.
Bis ich auf diese paar Zeilen gestoßen bin:

void updateView(double number)
{
  char value[100];
  sprintf(value,"%g",number);
}

Bei den kommenden Funktionen, die auch funktionieren, gebe ich einen 
String entsprechend der X und Y Position auf mein EA DOGL128-6 Display 
aus.
(Verwundung eines ATMEGA328p)

char_x=90;//0-128
char_y=2; //0-8
display_write("Hallo");

Da ich jetzt aber einen Double-Wert ausgeben möchte und diese Funktion 
nur für Strings geeignet ist, habe ich mich nach einer Double to String 
Umwandlung umgeschaut.
Doch leider funktioniert dies nicht:

double number = 10;

char_x=90;//0-128
char_y=2; //0-8

sprintf(value,"%g",number);     //Umwandlung double to string

display_write("value");

danke schonmal für eure Hilfe!

lg
Marcel

Autor: Helfer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> void updateView(double number)
> {
>   char value[100];
>   sprintf(value,"%g",number);
>   display_write("value");
>                 ^     ^
> }

1) display_write(value);

2) char value[100]; ist eine lokale Variable, die nur innerhalb 
updateView() gültig ist. Deine Ausgabefunktion display_write() muss dann 
innerhalb updateView() aufgerufen werden. Oder du machst char 
value[100]; zu einer globalen Variable.

Autor: Helfer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
3) Schau dir die Funktionen dtostre() und dtostrf() aus der Library an. 
Die sind eventuell platzsparender als das relativ fette sprintf().

Autor: Marcel Ofitsch (ofma03310)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke schonmal für so eine schnelle Antwort !

Funktion dtostrf:

char* dtostrf   (double val,char width,char prec,char *s)


Width sagt mir jetzt auf die schnelle nichts.
prec wird die Anzahl der Nachkommastellen sein.

und warum kommt beim char teilweise ein " * " vor ?

lg

Autor: Helfer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
C-Grundlagen 2. oder 3. Stunde im C-Kurs

"das ist eine Stringkonstante" und "value" ist eine andere.

char value[100]; ist ein Feld von 100 chars

Man kann eine Stringkonstante in ein char Feld speichern

char value[100] = "das ist eine Stringkonstante";

Möchte man die Stringkonstante ausgeben, kann man sie direkt ausgeben:

display_write("das ist eine Stringkonstante");

Oder man kann die Kopie aus dem Feld ausgeben, in dem man die Adresse 
des ersten Zeichens als Argument übergibt

display_write(&value[0]);

Oder aquivalent in kürzerer Schreibweise ohne &...[0]

display_write(value);

Autor: Helfer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei dtostrf brauchst du nicht raten, dafür gibt es eine Doku:
http://www.nongnu.org/avr-libc/user-manual/group__...

Also z.b. 10.0 ausgeben

dtostrf(10, 2, 1, value);

oder

dtostrf(number, 2, 1, &value[0]);

Das char *s in der Beschreibung ist ein weiterer Datentyp aus der 4. 
oder 5 C-Stunde: Ein Zeiger (Pointer) auf ein char.

Du kennst schon &value[0] als Adresse des ersten Zeichens in deinem Feld 
value. Die kannst (musst) du an dieser Stelle übergeben.

Autor: Helfer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> dtostrf(10, 2, 1, value);

Doku hätte ich selber genauer lesen sollen :)

dtostrf(10, 4, 1, value);
            ^  2 Vorkommastellen + 1 Dezimalzeichen + 1 Nachkommastelle

Bei dem ganzen nicht vergessen: libm.a ins Projekt aufnehmen.
http://www.mikrocontroller.net/articles/FAQ#Aktivi...

Autor: Marcel Ofitsch (ofma03310)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na ich wusste schon, dass es sich dabei um strings und dergleichen 
handelt!
Verwirrt hat mich nur der Stern bzw. Malpunkt *

zb.

char* dtostrf   (double val,char width,char prec,char *s)
    ^                                                 ^
    |                                                 |

ok, werde mich dann mit dem weiterbeschäftigen

danke schön

lg

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marcel Ofitsch schrieb:
> Na ich wusste schon, dass es sich dabei um strings und dergleichen
> handelt!
> Verwirrt hat mich nur der Stern bzw. Malpunkt *

Das widerspricht sich.

Bevor Du weiterstoppelst: Kauf Dir ein C-Buch. Und lies es durch.

Empfehlung:
Brian Kernighan & Dennis Ritchie, "Programmieren in C", 2. Ausgabe, 
Hanser-Verlag.

Ist zwar schon 20 Jahre alt, aber immer noch das Buch, das einem alles 
relevante über C vermittelt.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.