float to ascii

Gast #77956
Lesenswert?

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 #77958
Lesenswert?

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 #77962
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren