Avatar billede bizty Nybegynder
07. marts 2003 - 17:26 Der er 8 kommentarer og
1 løsning

Konvertere Float til Char

Hvordan konverterer jeg en float til et array af Char?
Jeg bruger Borland C++ Builder 4.
Avatar billede soreno Praktikant
07. marts 2003 - 17:33 #1
char buffer[16];
sprintf(buffer, "%f", minFloat);
Avatar billede soreno Praktikant
07. marts 2003 - 17:35 #2
Du kan kigge lidt på formaterings mulighederne her:
http://www.cplusplus.com/ref/cstdio/sprintf.html
Avatar billede bizty Nybegynder
07. marts 2003 - 17:37 #3
Mange tak. Du har redet mit liv...
Avatar billede olennert Nybegynder
07. marts 2003 - 17:41 #4
Hvis Borland C++ Builder 4 er ANSI-compliant, så kan du bruge ostringstream:

#include <sstream>
#include <string>
#include <strings.h>

using std::ostringstream;
using std::string;

int main()
{
    ostringstream ost;
    float f = 42.17;
    ost << f;

    string mystr = ost.str();
    char* myarray = new char[mystr.length() + 1];

    strncpy(myarray, mystr.c_str(), mystr.length());
    myarray[mystr.length()] = 0;
    // Nu er myarray et char array med din float
    // Så her kan du gøre noget med myarray. Men husk til sidst
    delete[] myarray;
    return 0;
}
Avatar billede olennert Nybegynder
07. marts 2003 - 17:43 #5
soreno>
Bemærk at sprintf ikke er typesikker, i modsætning til ostringstream (ligesom stdio.h printf, fprintf og så videre ikke er typesikker i modsætning til streams generelt).
Avatar billede soreno Praktikant
07. marts 2003 - 18:04 #6
Men det betyder vel intet hvis "man ved hvad man gør" - altså f.eks. konverterer en float data type til et char array.

Jeg ville være mere urolig hvis jeg skulle konvertere input fra bruger/fil/osv.
Avatar billede olennert Nybegynder
07. marts 2003 - 18:16 #7
Jeg laver altid fejl i min kode. Det er ikke med vilje, sådan er det bare. Men jeg har måttet konstatere at jo mere jeg bruger C++ standard library, jo færre fejl laver jeg. Standard library (herunder STL) giver mig den typesikkerhed, der gør at oversætteren fanger størstedelen af de fejl jeg laver. Og en fejl fanget på oversættelsestidspunktet er som regel ret nem at rette, det er straks værre med et underligt core dump, hvor man måske endda har fået overskrevet stakken, så der ikke er noget back trace.

Derfor foretrækker jeg at lade som om jeg ikke ved hvad jeg gør.

Men selv med sprintf kan det laves en smule mere sikkert med snprintf-udgaven, bare for at sikre at den float ikke på et tidspunkt bliver et tal der fylder mere end 15 tegn (eftersom der allokerer en 16-byte buffer som sprintf skriver ind i ).

Men ellers har du ret, jeg har bare for tit været ude for at selvom jeg "ved hvad jeg gør", så er det gået galt alligevel.
Avatar billede olennert Nybegynder
07. marts 2003 - 18:22 #8
Øv, af gammel vane gør jeg gør ikke tingene så pænt som jeg burde. I stedet for #include <strings.h> bør det selvfølgelig være

#include <cstring>
using std::strncpy;

Namespaces er din ven, især namespace std.
Avatar billede arne_v Ekspert
07. marts 2003 - 19:22 #9
olennert>

Principielt kan jeg godt tilslutte mig din betragtning om
type safe.

Jeg er dog ikke overbevist om at det er et godt eksempel. Din kode
er betydeligt større og mere kode betyder også normalt flere muligheder
for at lave fejl. Og der er masser af fejl-muligheder som compileren
ikke fanger.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester