www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Rechnen mit Kommazahlen


Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo... ich wolltrnur fragen, wie ich mit Kommazahlen rechnen kann. 
z.B.:

int i;
charbuffer[10];
double  j;

i=5;
j=i*1.024;
itoa(j,buffer, 10);
lcd_puts(buffer);

aber leider funktioniertdas bei mir nichtso recht. Kann mir jemand 
helfen?

gruß,
Mike

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was heißt es "funktioniert nicht"? Welche Fehlermeldung? Welchen 
Compiler verwendest du überhaupt?

Autor: BernhardT (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
charbuffer[10] oder
char buffer[10] ?

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es heißt schon char buffer[10] (tippfehler)

der compiler meldet keinen fehler, das lcd zeigt nur die 
Nachkommastellen der Zahl an

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry hab gemeint das LCD zeigt die Nachkommastellen nichtan, die 
Ganzzahlen schon.

Autor: BernhardT (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
itoa ist eine Abkürzung für Integer to ASCI ! Du hast immer noch nicht 
erzählt welchen Compiler - manche kennen z.B Dtostrf etc.
Gruß Bernhard

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
itoa() ist nur für Integer, also Ganzzahlen, deshalb wandelt der 
Compiler da Float nach Int um. Probier's mal mit ftoa() falls der 
Compiler das hat.

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ftoa() gibt es beim avr-gcc nicht, muss dtostrf heißen. Schau mal in die 
avr-libc Doku.

Autor: Markus Kaufmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
itoa wandelt integer in String. Wenn Du ihm ein double übergibst, dann 
wandelt er den in ein int um.

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke,... ich werd's probieren

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also ich hab's ausprobiert, jedoch komm ich mitder Syntax nich ganz 
klar, wie mussich dasverwenden? - beispiel code wäre super. ich verwende 
WinAVR

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hier meinversuchsprogramm:

        char buffer[16];
  int temp;
  double test;

  lcd_init(LCD_DISP_ON);

  temp = 15;
  test = temp * 3.132;

  dtostrf(test, 8, 3, buffer);

  lcd_clrscr();
  lcd_puts(buffer);

Autor: BernhardT (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
avr-libc-user-manual.pdf im \doc von WIN-AVR:

Buffer muss Pointer sein also *buffer ob deine LCD Routiene damit 
zurechtkommt weiss ich nicht.
Der rest sieht ganz gut aus.
Ach so LIBFLAGS = -lm muss im Makefile gesetzt sein.
Gruß Bernhard

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
buffer ist bei der Deklaration als Array ein Pointer, das passt schon in 
Mike's Programm.

Autor: BernhardT (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Korrektur s kann Pointer sein (muss wohl nicht zwingend). Sei so gut und 
gib bitte die Fehlermeldungen mit an.
Gruß Bernhard

Autor: BernhardT (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist für mich ein großes (Umsteiger-) Problem, das ich noch mit String 
denke. Ein Array anstelle eines Pointer zu nemen gibt bei den meisten 
Pascal Compilern auch eine Fehlermeldung.
Gruß Bernhard

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Egal ob du buffer als "char *buffer=..." oder als "char buffer[20]" 
deklarierst, wenn du "buffer" schreibst ist das immer ein Pointer der 
auf das erste Element des Arrays zeigt.

Autor: BernhardT (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Andreas hab ich kapiert (und auch schon ne ertse eigne Anwendung 
entmüllt :-)
Vielen Dank
Bernhard

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.