JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=078b463898fb80af238466a60ab004a6Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Aus Float n Char machen
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Claudio
Junior JLI'ler



Anmeldedatum: 25.08.2002
Beiträge: 63

Medaillen: Keine

BeitragVerfasst am: 15.08.2003, 11:19    Titel: Aus Float n Char machen Antworten mit Zitat

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 Question
_________________
-->http://www.en-studios.de<--
Voilà die neue Homepage ist fertig!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 15.08.2003, 11:37    Titel: Antworten mit Zitat

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 Wink
</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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 15.08.2003, 11:40    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 15.08.2003, 12:47    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Claudio
Junior JLI'ler



Anmeldedatum: 25.08.2002
Beiträge: 63

Medaillen: Keine

BeitragVerfasst am: 16.08.2003, 09:14    Titel: Antworten mit Zitat

Ah Super geht, danke TheMillenium!
_________________
-->http://www.en-studios.de<--
Voilà die neue Homepage ist fertig!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 16.08.2003, 21:21    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 17.08.2003, 09:00    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 17.08.2003, 17:33    Titel: Antworten mit Zitat

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 Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 17.08.2003, 18:05    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 17.08.2003, 18:10    Titel: Antworten mit Zitat

1000 times cout : 200 ms
1000 times printf: 160 ms
cout - printf = 40 ms

Smile

So scheinen sich die Systeme zu unterscheiden, hängt wohl stark vom Rechner ab
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Michael
JLI'ler



Anmeldedatum: 20.07.2002
Beiträge: 173
Wohnort: Münster / NRW
Medaillen: Keine

BeitragVerfasst am: 18.08.2003, 11:42    Titel: Antworten mit Zitat

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 Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 18.08.2003, 12:00    Titel: Antworten mit Zitat

genau Very Happy

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! Very Happy
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 18.08.2003, 18:04    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 18.08.2003, 18:06    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 18.08.2003, 18:14    Titel: Antworten mit Zitat

Was ist überhaupt der achso tolle Vorteil von STL ? Habs noch nie probiert und trotzdem klar gekommen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum