Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » float in int umwandeln

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
06.10.2005, 09:36 Uhr
~don_angelo
Gast


Hallo zusammen, ich habe eine frage wie kann ich eine float zahl z.b
213.23 in = 213 umwandeln
sodass ich nur die ganzzahl habe.
Gibt es da eine Funktion mod oder so?

Würde mich au eine antwort freuen!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.10.2005, 09:40 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi, falls du das ohne runden machen willst (also 223.5 -> 223 223.4 -> 223 und nicht 223.5 -> 224) dann ginge das so:


C++:
float fliess = 213.23;
float ganz = (float)(int)fliess;



durch die umwandlung in int fallen die nachkommastellen weg.

Wenn du korrekt runden willst, musst du fliess einfach noch 0.5f dazuaddieren
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.10.2005, 09:59 Uhr
~don_angelo
Gast


Danke für deine Antwort ist aber nicht genau ds was ich suche.
Ich hane z.b eine Zahl 233434.5454
diese will ich jetzt sozusagen "ausschneiden" und nur 233434 herausnehmen. Damit ich diese Zahl dann in eine Zeit umwandeln kann. Und die nachkomastellen Zahlen muss ich, die erste Zahl nach dem Koma nehmen und hinzufügen.

Beispiel:

float 3656.112312
umwandeln das ich zuletzt diese Zeit ausgeben kann: 1h 0min 56 sek:1
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.10.2005, 10:40 Uhr
virtual
Sexiest Bit alive
(Operator)


Doch, das ist das, was Du suchst, denn Flos antwort beschreibt doch genau das:
float f = 3656.112312
int i = (int)f;
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
06.10.2005, 10:44 Uhr
~don_angelo
Gast


und wie kann ich dann schlussendlich die nachkomazahl auch noch nacherstellen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
06.10.2005, 10:56 Uhr
hsp



du kannst das aber auch anders machen, allerdings wird die Zahl dann dabei gerundet.


C++:

float i = 213.23;
int x = static_cast<int>(i)




dann ist x = 213
musst aber dabei bedenken das dann immer gerundet wird sprich wenn nachkommastelle kleiner x.5 ist abgerundet und ab x.5 aufgerundet. wie du dann hinterher noch die nachkommastelle getrennt abrufen kannst weiß ich jetz allerdings nicht

Edit: Beim zweitenmal durchlesen ist mir aufgefallen, dass dies nicht wirklich zur Lösung deines Problems beiträgt, sorry
--
Actiones nostras, quaesumus, Domine, aspirando praeveni et adiuvando prosequere, ut cuncta nostra operatio a te semper incipiat, et per te coepta finiatur.

Dieser Post wurde am 06.10.2005 um 11:00 Uhr von hsp editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
06.10.2005, 11:11 Uhr
~don_angelo
Gast



danke trotzdem weil ich bin ein Projekt am realisieren welcher lauf-zeiten speichert und diese schlussendlich in ein File ausgeben muss. Und da es sein kann das verschiedene Läufer die gleiche Zeit haben aber nicht auf zehntelsekunden genau wäre das kriterium schlussendlich noch wichtig hinzufügen..


Falls jemand mir noch helfen könnte wäre ich dankbar.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
06.10.2005, 11:23 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja du kannst sowas machen wenn du sozusagen max n nachkommastellen willst:

www.fun-soft.de/showtopic.php?threadid=12389

die rundet dann korrekt die n+1te stelle in deinem fall kriegste aus 3656.112312

dann 3656.11 ansonsten könnteste es noch so machen:


C++:
float zeit = 3656.112312f;
int minuten = (int)zeit;
float f_sek = zeit - (float)minuten;
int sek = (int)(f_sek*100.0f);



ist zwar nicht sonderlich elegant und kann sicher noch beschleunigt werden, aber geht:

zeit = 3656.112312
minuten = 3656
f_sek = 0.112312
sek = 11

(ansonsten sollte dir bewusst sein das 100s != 1min )


Bearbeitung:


Zitat:

musst aber dabei bedenken das dann immer gerundet wird sprich wenn nachkommastelle kleiner x.5 ist abgerundet und ab x.5 aufgerundet



da wird normalerweise nix gerundet! bzw immer abgerundet. die Nachkommastellen werden so einfach abgeschnitten. So würde gerundet:


C++:
float i = 213.23;
int x = static_cast<int>(i+0.5f);



dann würde aus 213.49 -> 213 und aus 213.50 -> 214

ob man nun static_cast nimmt oder einfach nen c-style-cast ist allgemein meist egal.



--
class God : public ChuckNorris { };

Dieser Post wurde am 06.10.2005 um 11:25 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: