Float nach String konvertieren??

Hi
Ich bin dabei ne lib zu schreiben, die zahlen in strings, und strings in Zahlen umwandelt. Soweit habe ich alle Funktionen fertig, bis auf eine:
Ich möchte eine float-variable in einen string (char*) umwanden.
-1.2 soll "-1,2" werden.

Hört sich erstmal ganz einfach an, aber :D

Ich kann keine "fremden" funktionen nutzen!

Wie mach ich das??
 
Von welcher Sprache redest du? Das ist mit Sicherheit in jeder Sprache schon implementiert !
 
fremd währe z.B. sprintf.
Alles, was mit #include eingebunden werden muss. ;)

Code:
int main()
{
 char zahl[10];
 fl2str(zahl,-1.2);
 return 0;
}

int flt2str(char* dest, float src)
{
 //...
}

So sollte es das ganze programm dann aussehen ;)
 
C nutzt doch IEEE 754
also :http://de.wikipedia.org/wiki/IEEE_754 ;)

Zumindest von Pascal her kenne ich noch Instructions, die einmal die Zahl vor dem Komma zurückliefern und nach dem Komma - ab da muss man ja nur noch "normale" Zahlen (also Integers) konvertieren. K.A aber mehr, wie es hieß und ob es in C überhaupt (mit Standardlibs bzw. Deinen Einschränkungen) verfübgar ist.

Was man aber machen kann: wenn mit Floats gerechnet wird und eine FPU verfügbar ist, so kann man diese direkt ein bisschen quälen. Im MASM32 Packet ist eine FloatToASCII Funktion, die einen Float "direkt" ohne Systemcalls/Fremdaufrufe nach ASCII konvertiert.
Das sieht zwar erstmal nach "viel" aus, allerdings werden da etliche Sonderfälle beachtet.
 
Danke, genau so einen Denkanstoß brauchte ich ;)

-- EDIT --

Wer faul ist, darf nicht dumm sein ;)
Ich habe mir den ganzen lowlevel kram mal erspart, und was einfacheres zusammengabeut ;)

Code:
 long tmp = src;
 int size=0;
 size = strex::dez2str(dest,tmp,0);
 dest[size++]=',';
 
 src -= tmp; //so, vor dem komma sindwa fettich, jetzt kommt das zeug dahinter
 if(src<0)src *= -1;

 for(int i=0; i<6; i++)
 {
  src *= 10.0;
  tmp = src;
  src -= tmp;
  dest[size++] = tmp+0x30;
 }
 dest[size]=0x00;
return size;

leider gibts ein paar ungenauigkeiten... aber die sind erstmal nicht so tragisch...
Jedenfals danke für eure hilfe!!
 
Zurück
Oben