Forum: Mikrocontroller und Digitale Elektronik Rechnen mit Kommazahlen


von Mike (Gast)


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

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

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

von BernhardT (Gast)


Lesenswert?

charbuffer[10] oder
char buffer[10] ?

von Mike (Gast)


Lesenswert?

es heißt schon char buffer[10] (tippfehler)

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

von Mike (Gast)


Lesenswert?

sorry hab gemeint das LCD zeigt die Nachkommastellen nichtan, die 
Ganzzahlen schon.

von BernhardT (Gast)


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

von Andreas S. (andreas) (Admin) Benutzerseite


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.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

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

von Markus Kaufmann (Gast)


Lesenswert?

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

von Mike (Gast)


Lesenswert?

danke,... ich werd's probieren

von Mike (Gast)


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

von Mike (Gast)


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);

von BernhardT (Gast)


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

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

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

von BernhardT (Gast)


Lesenswert?

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

von BernhardT (Gast)


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

von Andreas S. (andreas) (Admin) Benutzerseite


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.

von BernhardT (Gast)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.