Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Claudio Junior JLI'ler
Anmeldedatum: 25.08.2002 Beiträge: 63
Medaillen: Keine
|
Verfasst am: 15.08.2003, 11:19 Titel: Aus Float n Char machen |
|
|
Hi,
weiss hier jemand wie ich aus nem Float sozusagen n Char macehn kann. Ich hab da ne eigene Funktion zum Ausgeben von Text. Jetzt will ja da aber ne float Variable anzeigen lassen, aber da sagt er mir das er n char nicht in float konvertieren kann.
Also wie mach ich das dann _________________ -->http://www.en-studios.de<--
Voilà die neue Homepage ist fertig! |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 15.08.2003, 11:37 Titel: |
|
|
Da musst du dir wohl noch ne eigene Funktion schreiben. Mehrere Stellen bekommt man mämlich net in einen char. Du könntest höchstens versuchen, das mit dem type-cast zu versuchen
Code: | char charvar='x';
float floatvar=123.456f;
charvar=(char)floatvar; |
Aber das ist wahrscheinlich ungenau und bringt nicht das erwartete Ergebnis.
Falls du das ganze in einen String machen willst, kannst du dir ja dafür ne Funktion schreiben, die dann dir Ziffern der Fließkommazahl trennt und in einen String schreibt.
<edit>
Viellecht gibts ja sowas, wie itoa() für floats. Guck einfach mal in der MSDN
</edit> _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 15.08.2003, 11:40 Titel: |
|
|
Ich glaube er will die Zahl an sich ausgeben. Ich hab mir eine Hilfsfunktion geschrieben:
Code: |
string itos(int a)
{
stringstream foo;
string bar;
foo << a;
foo >> bar;
return bar;
}
|
Hab ich jetzt einfach nur aus meinem Quelltext rauskopiert. Du musst statt int halt nur float schreiben. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 15.08.2003, 12:47 Titel: |
|
|
Wie es The Lord of Programming geht es 100% nicht!!!
Dafür gibt es keine Standardumwandlungsoperatoren...
mach das doch wie es immer geht:
char string[256];
float eineFloat = 1.22f;
sprintf(string,"Wert von eineFloat: %f",eineFloat);
ach, fast vergessen, dann einfach:
cout << string; _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Claudio Junior JLI'ler
Anmeldedatum: 25.08.2002 Beiträge: 63
Medaillen: Keine
|
Verfasst am: 16.08.2003, 09:14 Titel: |
|
|
Ah Super geht, danke TheMillenium! _________________ -->http://www.en-studios.de<--
Voilà die neue Homepage ist fertig! |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 16.08.2003, 21:21 Titel: |
|
|
Es ist aber auch mit dieser Funktion möglich, obwohl die vorherigen Lösungen super sind:
Code: |
char *_fcvt(double value, int count, int *dec, int *sign);
|
Hier ein Beispiel dazu:
Code: |
#include <stdlib.h>
#include <stdio.h>
void main( void )
{
int decimal, sign;
char *buffer;
double source = 3.1415926535;
buffer = _fcvt( source, 7, &decimal, &sign );
printf( "source: %2.10f buffer: '%s' decimal: %d sign: %d\n",
source, buffer, decimal, sign );
}
|
Die Ausgabe wäre dann diese:
source: 3.1415926535 buffer: '31415927' decimal: 1 sign: 0
(Das Beispiel wurde aus der Hilfe genommen.)
Wieso nutzt Ihr eigentlich immer cout und cin ??? |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 17.08.2003, 09:00 Titel: |
|
|
Weil sie C++ Standard sind und meines Wissens schneller arbeiten, weil es keine formatierte Ausgabe ist wie printf. _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 17.08.2003, 17:33 Titel: |
|
|
Hab mal cout und printf miteinander verglichen:
Code: |
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
using namespace std;
void main()
{
int times=10000;
float f=3.141592f;
DWORD start=GetTickCount();
for(int i=0; i<times; i++)
cout<<i+1<<". Hello World "<<f<<"\n";
DWORD time1=GetTickCount()-start;
start=GetTickCount();
for(int i=0; i<times; i++)
printf("%d. Hello World %f\n",i+1,f);
DWORD time2=GetTickCount()-start;
printf("\n%d times cout : %d ms",times,time1);
printf("\n%d times printf: %d ms",times,time2);
printf("\ncout - printf = %d ms",time1-time2);
getchar();
}
|
Das ergebnis war überraschend:
10000 times cout : 3325 ms
10000 times printf: 1542 ms
printf ist fast doppelt so schnell |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 17.08.2003, 18:05 Titel: |
|
|
Sorry, aber dein QUellcode ist nicht korrekt und wenn amn ihn korrigiert kommt das raus:
cout 3255ms
printf: 3623ms
cout - printf: -368ms
hier ist der richtige Code, TickCounts funktioniert nicht gescheit...
Code: |
#include <iostream.h>
#include <windows.h>
#include <time.h>
#include <stdio.h>
void main()
{
int times=1000;
float f=3.141592f;
long start;
long time1;
long time2;
int i=0;
system("cls");
start=timeGetTime();
for(i=0; i<times; i++)
cout<< (i+1) <<". Hello World "<< f << endl;
time1=timeGetTime()-start;
system("cls");
start=timeGetTime();
for(i=0; i<times; i++)
printf("%d. Hello World %f\n",i+1,f);
time2=timeGetTime()-start;
printf("\n%d times cout : %d ms",times,time1);
printf("\n%d times printf: %d ms",times,time2);
printf("\ncout - printf = %d ms",time1-time2);
getchar();
} |
_________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 17.08.2003, 18:10 Titel: |
|
|
1000 times cout : 200 ms
1000 times printf: 160 ms
cout - printf = 40 ms
So scheinen sich die Systeme zu unterscheiden, hängt wohl stark vom Rechner ab |
|
Nach oben |
|
|
Michael JLI'ler
Anmeldedatum: 20.07.2002 Beiträge: 173 Wohnort: Münster / NRW Medaillen: Keine
|
Verfasst am: 18.08.2003, 11:42 Titel: |
|
|
nein, es hängt nicht vom rechner ab sondern davon ab, WAS man ausgibt. Wenn man einen statischen String wie zb. "Das ist ein String" 1000mal ausgibt, ist die Zeitdifferenz nicht gerade groß. Wenn man abe, wie theMillenium in seinem Programm, Variablen mit ausgibt, dann wird die Zeitdifferenz größer. Ist ja auch klar, denn printf muss ja zunächst alle variablen in den string packen, was zeit kostet. hier kann cout einfach eine typenkonvertierung in ein ausgebbares format machen und ist schon fertig. _________________ Es geht auch ohne |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 18.08.2003, 12:00 Titel: |
|
|
genau
und dazu gehört cout auch zur STL (Standard Template Library). Die natürlich durch ihren optimierten Code bekannt ist und dadurch ziemlich effizient arbeitet! _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 18.08.2003, 18:04 Titel: |
|
|
Es muss wohl doch vom Rechner abhängen wie man ja bei den Ergebnissen zwischen TheMillenium und mir sehen kann. Der Quelltext ist ja bis auf wenigen Änderungen gleich.
Ausserdem wer wird schon tausende male einen Text ausgeben, da der Zeitunterschied dann auch nicht so gross wäre (besonders bei den heutigen Rechnern) ist das doch egal ??? Ist doch blödsinn (es sei denn man bastelt einen Matrix Screensaver).
Bastelt ihr euch alle Konsolenanwendungen oder warum benutzt Ihr das ????? |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 18.08.2003, 18:06 Titel: |
|
|
Code: |
#include <iostream.h>
|
Dieser Header ist veraltet und nicht STL Kompatibel. Man sollte <iostream> nehmen. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 18.08.2003, 18:14 Titel: |
|
|
Was ist überhaupt der achso tolle Vorteil von STL ? Habs noch nie probiert und trotzdem klar gekommen. |
|
Nach oben |
|
|
|