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
intmain(intnargs,char**args)
8
{
9
floatf=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_tganzzahlig=f;
15
16
charausgabestring[3]=" ";
17
18
if(ganzzahlig>99)
19
{
20
// Fehler zu behandeln: passt nicht in zwei Stellen
21
// ...
22
puts(">99");
23
}
24
elseif(ganzzahlig<-9)
25
{
26
// Fehler zu behandeln: passt nicht in zwei Stellen (wg. -)
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.
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
>elsestrncat(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.