float to ascii

Gast #77956
Hallo C-Gemeinde,

Mein Hilferuf gehört nicht ganz in dieses Forum. Ich habe ein Problem
mit meinem C-Programm, geschrieben mit dem ICC-AVR-Compiler.
Da hier aber die fähigsten C-Programmieren für AVR zu Hause sind,
versuche ich hier mein Glück.

Ich brauche eine Funktion die float nach ascii wandelt. Die interne
ftoa-Funktion vom ICC-AVR ist für mich nicht brauchbar. Wenn ich mehr
Ahnung von 'C' hätte würde ich mir selber eine schreiben.

Die Funktion soll so aussehen:

my_ftoa( float_variable, ascii_variablevariable, stellen_hinter_komma)

float_variable: hier liegt mein float
ascii_variable: hier soll der ascii-Wert abgelegt werden
stellen_hinter_dem_komma: hier wird ein Wert von 0 bis 6 angegeben.
Der ascii_Wert muß mit 0x00 abgeschlossen werden.

Meine Frage: Wer verfügt über eine solche Funktion, bzw. wer kann mir
eine solche Fuktion schreiben?

Da das Projekt kommerziell genutzt werden soll bin ich natürlich bereit
den Author dieser Funktion finanziell zu entlohnen.


Vielen Dank   my_ftoa
Gast #77957
Hast du die funktion sprintf() zur Verfügung? Mit der ist es kein
Problem: sprintf(buffer,"%6.3f",f) schreibt z.B. das Format 12.345.
Mit der avr-libc ist das z.B. möglich.
Gast #77958
Hallo Fritz,

meine jetzige Variante läuft mit printf. Dieses printf hat jedoch einen
Schönheitsfehler: Es rundet die Nachkommastellen ab. Z.B, der
float-Wert 12,459789 wird, bei 3-stelliger Genauigkeit, nicht mit
12,459 ausgegeben, sondern mit 12,46.
Ich weiß, das z.B.die Compiler CodeVision und Keil-C166 soetwas nicht
machen.

Die Ausgabe auf den Display macht ein nervöses Bild wenn sich die
Stellenzahl ändert.


Schönen Gruß   my_ftoa
Gast #77960
Old Bug:

Dieser Effekt tritt bei allen Genauigkeitswerten, also von 0 bis 6,
auf. Irgendwann wird immer gerundet und abgeschnitten.


Gruß   my_float
Gast #77962
Ich benutze ebenfalls ICC Compiler in der 45 Tage Testversion

ich habe ein Problem bei der Formatierung:

int printf(char *fmt, ..)

%[flags]*[width][.precision][l]<conversion character>

%d - prints the next argument as a decimal integer
%f - prints the next argument as a floating point number in decimal
<aaa>.<bbbb> format

Hat jemand Beispiele der verschiedenen printf oder sprintf
Formatierung?
Bei mir funktioniert nur sprintf(string, "%d",value);
Bei %f gibt die Funktion einen String aus "Integer..."

Ich denke evtl. den AVRGCC auszuprobieren, aber der ist nicht so
komfortabel.

Danke
Gast #77963
Hmm, RTFM würde ich vermuten.  Viele Microcontroller-Compiler
(AVR-GCC/avr-libc ebenfalls) implementieren standardmäßig keine
Gleitkomma-Darstellung in der printf-Familie, weil diese den Code
unmäßig aufbläht.  Da printf erst zur Laufzeit feststellt, was
wirklich gebraucht wird, müßten alle Applikationen diesen Ballast
mitschleppen.

Daher ist Gleitkommadarstellung sehr oft eine wählbare Option.
Möglicherweise hast Du diese einfach nicht ausgewählt.

Ansonsten hilft Dir jedes gute C-Lehrbuch bzw. jeder C-Compiler für
Standardcomputer, den Koloß von printf besser zu verstehen.  Das ist
nicht in drei Minuten aufgeschrieben.
Gast #77964
bei printf("%f", f) muss f ein flieskomma variable sein, oder ein
Fliesskomma Ergebnis.

Richtig:

double f;
int i;

printf("%f",f);
printf("%f",i/2.0);

falsch:
int i;

printf("%f",i);
printf("%f",i/2);

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.