.| Autor | Beitrag |
|---|---|
|
000 15.02.2001, 19:39 Oheim |
Wie kann ich einer int variablen den Die vorkommastellen einer float variable zuweisen... (int)float_variable geht zwar vom kompilieren her, aber die Werte die da rauskommen sind absolut falsch ! -- |
|
Profil || Suche |
|
001 16.02.2001, 00:08 Kriz |
Hä? Die Typumwandlung kappt von float nach int die Nachkommastellen ab. Was zum Henker soll da nicht funzen? 5.55 ---> 5 Es werden meiner Erfahrung nach keine Rundungen vorgenommen bei der Typumwandlung. In C++ würde ich da den sicheren Weg gehen: int INTVAR = static_cast<FLOATVAR>(int); Damit dürfte es keine Probleme geben. Was benutzt Du denn für einen C++ Compiler? Bist Du dir sicher, daß es ein C++ Compiler ist und net Pascal oder Fortran (*ggg*)??? Cu --K:R-I)Z++ |
|
Profil || Suche |
|
002 16.02.2001, 10:40 TheTinySteini |
Vorrausgesetzt du redest vom HL-Code, dann dürfte es mit (int) keine Probleme geben - static_cast ist unnötig. Ich glaub du kannst sogar schreiben int intvar = float_var. Normalerweise würde der Compiler dabei ne Warnung ausgeben, aber bei HL ist die deaktiviert (weil die da ziemlich oft sowas in der Art machen).
TheTinySteini |
|
Profil || Suche |
|
003 16.02.2001, 15:48 DarKnight |
"du kannst sogar schreiben int intvar = float_var" sicher gibt das ne warnung und es ist auch kein guter programmierstil. also wie kriz schon sagte wird einfach die nachkommastelle bei int a = int(float b); abgeschnitten. das muss gehen. ausserdem ist es meines wissens nach die einzige schnelle möglichkeit float in int zu konvertieren. Wenn du aber runden willst, ist das net so gut. --void CHudSayText :: EnsureTextFitsInOneLineAndWrapIfHaveTo( int line ) -- Aja? |
|
Profil || Suche |
|
004 16.02.2001, 17:29 Oheim |
Hm, also ich caste sie nach int über
In der floating point var stehen am Anfang recht große Werte von 0 bis 90,
|
|
Profil || Suche |
|
005 17.02.2001, 14:01 Kriz |
Zum zweiten Mal: HÄ? Verstehe ich das richtig? In FLOATVAR steht z.B. 88.0 und nach der Typumwandung steht in INTVAR z.B. 16? Ey, Alter, ich glaube, dein Compiler ist im Arsch... Cu --K:R-I)Z++ |
|
Profil || Suche |
|
006 17.02.2001, 15:06 feigling |
Vielleicht verstehe ich die Frage falsch, aber ich könnte mir vorstellen, dass wenn er ne float Zahl hat, sagen wir mal 4,683 hat, dass er dann eine int Variable mit dem Wert mit der vier, dann eine int Variable mit der 6, eine mit der 8 und eine mit der 3 hat. So dass man die Zahlen nach den Komma in jeweils ein int Variable schreiben kann.
|
|
Profil || Suche |
|
007 17.02.2001, 15:49 Oheim |
@Kriz, jep genauso läuft das...
cl_entity_t *player = gEngfuncs.GetLocalPlayer(); vec3_t vecDelta = Vector(0, 1, 0);
vecAngleDiff.x -= player->angles.x;
char sz[20];
int angx = (int)(vecAngleDiff[0]);
sprintf(sz, "x: %i; y: %i\n", angx, angy);
|
|
Profil || Suche |
|
008 17.02.2001, 19:20 Ducados |
was hälst du von: int angx = (int)(vecAngleDiff.x);
|
|
Profil || Suche |
|
009 17.02.2001, 20:23 apfelkorn |
jepp... eine vektor-variable im hlsdk ist kein array, sondern besteht aus drei member-variablen: x, y und z. Es wird immer ein neuer gesamtwert (was weiß ich wie) berechnet, mit dem man solche kunststücke wie |
|
Profil || Suche |
|
010 17.02.2001, 21:12 TheTinySteini |
Jo, genau. Es ist allerdings ein bisschen durcheinander im HL-Quellcode. Denn es gibt zwei verschiedene Vektor-Typen. Einmal ein einfaches Array von 3 Floats, die man dann also so anspricht: vector[0...2]
Dann gibt's noch ne Vektor-Klasse. Da sind dann die ganzen Operatoren überladen und Funktionen wie Length, Crossproduct und Dotproduct implementiert. Bei so einem Vektor ist es dann eben vector.x. Hier kann man dann ganz einfach schreiben: vector3 = vector1 + vector2; mit der ersten Variante müsste man schreiben VectorAdd( vector1, vector2, vector3 ) Tjaja... [edit]
TheTinySteini |
|
Profil || Suche |
|
011 17.02.2001, 23:42 Oheim |
Jo, ich hab beides ausprobiert (vector[0] und vector.x), aber beides liefert die gleichen Ergebnisse! Am Compiler kanns auch nuich liegen, denn ich benutz VC 5.0, wie VALVE. BITTE HELFT MIR ! *verzweifel...* -- |
|
Profil || Suche |
|
012 17.02.2001, 23:57 Hellfire |
ich erinner mich gerade so dunkel an eine Funktion in der Vektor Klasse, die sich CopyToArray nennt, die die Membervariablen in einen Array kopieren. Das dürfte wohl auch der Grund sein, dass du sie auch wie einen Array benutzen kannst. -- |
|
Profil || Suche |
|
013 18.02.2001, 16:27 Another1 |
es liegt am printf(): nich %i nehmen, %d , irgendwie funzt %i bei MSVC++6 nit soo richtig! --Another1 ...relaxing..atm =) |
|
Profil || Suche |
|
014 18.02.2001, 17:30 Oheim |
@another1, daran liegt es auch nicht ! -- |
|
Profil || Suche |
|
015 18.02.2001, 22:16 Another1 |
Hast du es ausprobiert? --Another1 ...relaxing..atm =) |
|
Profil || Suche |
|
016 19.02.2001, 11:28 Kriz |
Hmmm... %i is auch noch so ein Relikt aus der Urzeit. Ich glaube sogar, daß %i seit langem schon nicht mehr zum ANSI gehört... Obwohl ich den Sprung eigentlich nie ganz so kapiert habe. Ich meine, mir ist bis heute nicht eingefallen, was das d in %d ausgeschrieben heißen könnte! i is ja klar (integer), aber d? :-? Cu --K:R-I)Z++ |
|
Profil || Suche |
|
017 19.02.2001, 12:42 dp Administrator |
decimal afaik -- |
|
Profil || Suche |
|
018 19.02.2001, 17:54 Oheim |
Auf jedenfall klappt es nicht.... -- |
|
Profil || Suche |
|
019 19.02.2001, 18:22 anothergb02 |
hapa hapa :
void FloatToInt(float _float)
} musste nen bissle rumpumsen damit es klappen wird (habe es nicht getestet) und ueber den Huegel zu RUTZFZ springen :P => rauskommen sollte ne Zahl bei der die letzten 2 Zahlen fuer die Kommastelle stehen
wenn du es nicht schaffen soltest dann spring ueber den Huegel und fliege in die SONNE SONNE BUMM BUMM hmm sollte nicht so viele Drogen nehen (currently gar keine!! Bin so fröhlich, weil de Schule wieder angefangen hat und ich nun wieder sterbe) --Being in john Malkovich |
|
Profil || Suche |
|
020 19.02.2001, 19:04 Prefect |
OMFG! Himmel hilf sag ich da nur... Ach ja: kann es sein, dass du einen Pointer von float nach int umgewandelt hast? Dann wird nämlich das interne Format nicht berücksichtigt, und dabei kann eine Menge Unsinn rauskommen.. also völlig andere Zahlenwerte. cu,
Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
021 19.02.2001, 19:13 anothergb02 |
ja :) ich habe den code auch nicht getestet : ]
naja das zu ändern ist kein Problem, hätte wohl lieber noch warten sollen, bis ich das poste (war da nen bissle happy und verwirrt -> wie man schwer erkennen kann) --Being in john Malkovich |
|
Profil || Suche |
|
022 19.02.2001, 19:33 TheTinySteini |
btw: 10 hoch 2 schreibt man so: int c = 10;
TheTinySteini |
|
Profil || Suche |
|
023 20.02.2001, 15:27 anothergb02 |
dass mit dem Falschherumschreiben der Zahlen stimmt uebrigens nicht :) --Being in john Malkovich |
|
Profil || Suche |
|
024 20.02.2001, 19:18 Oheim |
@Prefect: ne, ist kein Pointer, ich deklariere meinen Vektor local, lasse ihn von VectorAngles füllen und will ihm dann die Werte entnehmen/konvertieren... BTW: Ich bin so verzweifelt, ich hab gerade schon mal *ernsthaft* [schrecklich] dran gedacht AnotherGB02s Version zu testen... ;) -- |
|
Profil || Suche |

