Hi, ich habe eine floatvariable erg, von dieser Variablen möchte ich die ersten zwei Stellen vor dem Komma in ein char-Array für die Ausgabe schreiben: float erg; chart Ausgabe[6]; erg =..... ftoa(erg,0,Ausgabe); // geht nicht, da hängt sich der Prozessor auf itoa(erg,Ausgabe); // hat mit Compilerwarnung funktioniert, da hab ich nur Angst, dass irgendwo ein Überlauf stattfindet Wie macht man sowas "sauber"?
sven schrieb: > ftoa(erg,0,Ausgabe); // geht nicht, da hängt sich der Prozessor auf Wie ist denn das ftoa deklariert, das du da nutzt? Was bedeutet die 0? > itoa(erg,Ausgabe); // hat mit Compilerwarnung funktioniert, da hab ich > nur Angst, dass irgendwo ein Überlauf stattfindet Was für eine Warnung? Welche iota benutzt du da? Ich kenne das nur mit drei Parametern.
Ich versuche mich mal vorsichtig Deinen Gedankengängen zu nähern. Es kommt mir so vor, als wenn Du die ersten zwei Stellen (vor oder dem nach dem Komma oder unabhängig vom Exponenten)? ausgeben willst. Zu diesem Behufe hast Du versucht ein Scrabble-Spiel auf dem Pflaster vor der Stadtbibliothek auszulegen (nur die Pappe), ein rohes Ei darauf zu zerschlagen und bei Vollmond dessen Licht darauf zu spiegeln. Das hat nicht geklappt. (Was soll den bitte Basis 0 sein?) Dann hast Du einem Kaninchenfell bei Tempo 80 im Tunnel bei Herrenberg die dritte Synphonie von irgendeinem obskuren Komponisten vorgespielt. Das hat auch nicht funktioniert. (Was für ein itoa benutzt Du da und woher weisst Du das dann die float Zahl immer zwishen 10 und 99 ist?) Ich gebe ja zu das Deine Versuche in Wahrheit doch näher am Subjektbereich waren als ich hier vorspiegele. Aber was um Himmels willen reitet Dich einfach irgendwas ohne Sinn und Verstand rumzuprobieren von dem Du eigentlich überhaupt nicht vermuten kannst das es Dich in irgendeiner Weise Deinem Ziel näher bringt? Nimms nicht übel. Ich drücke mich nun mal so blumig aus.
recht effizient kann man das von Hand bauen. Wie genau, hängt davon ab, was man über die Zahlen weiß (immer sicher positiv, wie groß maximal? ...). Beispiel:
1 | #include <stdlib.h> |
2 | #include <stddef.h> |
3 | #include <stdio.h> |
4 | #include <string.h> |
5 | #include <stdint.h> |
6 | |
7 | int main( int nargs, char **args ) |
8 | {
|
9 | float f = 3.141592653; |
10 | |
11 | |
12 | // Wenn man sicher ist, daß die Zahl nicht größer als 128 wird;
|
13 | // sonst entsprechend mehr als 8 Bit:
|
14 | int8_t ganzzahlig = f; |
15 | |
16 | char ausgabestring[3] = " "; |
17 | |
18 | if( ganzzahlig>99 ) |
19 | {
|
20 | // Fehler zu behandeln: passt nicht in zwei Stellen
|
21 | // ...
|
22 | puts( ">99" ); |
23 | }
|
24 | else if( ganzzahlig<-9 ) |
25 | {
|
26 | // Fehler zu behandeln: passt nicht in zwei Stellen (wg. -)
|
27 | // ...
|
28 | puts( "<-9" ); |
29 | }
|
30 | else
|
31 | {
|
32 | uint8_t tmp; |
33 | if( ganzzahlig<0 ) |
34 | {
|
35 | ausgabestring[0] = '-'; |
36 | }
|
37 | else if( (tmp=(ganzzahlig/10)%10) ) |
38 | {
|
39 | ausgabestring[0] = tmp+'0'; |
40 | }
|
41 | ausgabestring[1] = (abs(ganzzahlig)%10)+'0'; |
42 | }
|
43 | |
44 | puts( ausgabestring ); |
45 | return 0; |
46 | }
|
Recht einfach gehts mit sprintf und strncat. sprintf(hilfsstring,"%f",quellfloat); strncat(zielstring,hilfsstring,2);
Frank Bär schrieb: > Recht einfach gehts mit sprintf und strncat. > > sprintf(hilfsstring,"%f",quellfloat); > strncat(zielstring,hilfsstring,2); Wenn die Zahl aber unter 10 ist, hat man die erste Ziffer und den Punkt im String.
Klaus Wachtler schrieb: > Frank Bär schrieb: >> Recht einfach gehts mit sprintf und strncat. >> >> sprintf(hilfsstring,"%f",quellfloat); >> strncat(zielstring,hilfsstring,2); > > Wenn die Zahl aber unter 10 ist, hat man die erste Ziffer > und den Punkt im String.
1 | sprintf(hilfsstring, "%f",quellfloat); |
2 | if(value<10) strncat(zielstring,hilfsstring,1); |
3 | else strncat(zielstring,hilfsstring,2); |
wobei snprntf() jetzt nicht unbedingt das effizienteste Werkzeug auf einem MC ist :-)
Frank Bär schrieb: > Klaus Wachtler schrieb: >> Frank Bär schrieb: >>> Recht einfach gehts mit sprintf und strncat. >>> >>> sprintf(hilfsstring,"%f",quellfloat); >>> strncat(zielstring,hilfsstring,2); >> >> Wenn die Zahl aber unter 10 ist, hat man die erste Ziffer >> und den Punkt im String. > >
1 | > sprintf(hilfsstring, "%f",quellfloat); |
2 | > if(value<10) strncat(zielstring,hilfsstring,1); |
3 | > else strncat(zielstring,hilfsstring,2); |
4 | >
|
SChau dir lieber an, was man mit dem Formatstring so alles treiben kann. sprintf kann das schon ganz alleine. Man muss es ihm nur sagen.
sven schrieb: > ich habe eine floatvariable erg Das solltest du vermeiden, wenn das irgendwie hinzukriegen ist. Wenn du schon weißt, dass dein Ergebnis zwischen 0 und 99 ist, sind Integerzahl auf dem uC meist die bessere Wahl. Wozu willst du da die Dynamik mitschleppen, die dir der Exponent bietet.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.