C(++) Problem
Lactobacillus 22.01.2001 - 20:47 1126 15
Lactobacillus
Addicted
|
Hallo, wie schneide ich den Nachkommaanteil einer Variablen ab? Ich bräuchte es um feststellen zu können, ob eine Zahl gerade oder ungerade ist... if (Nachkommaanteilabgeschnitten(1/a) == 1/a) ... Auch andere konstruktiven Lösungsvorschläge sind willkommen http://overclockers.gamers.at/ubb/smilies/wink.gifLactobacillus
|
Hatzki
Pinky in action
|
Pff ... ich hab denn ganzen Müll scho glernt aber scho wieder alles vergessen wies ausschaut ... http://overclockers.gamers.at/ubb/smilies/biggrin.gifHmm des einzige was ma im Moment einfallt: Die Zahl die du hast is ja sicher als float definiert ... schau mal ob du sie in eine andere Zahl kopieren kannst die als integer definiert is .. dann könntest as leicht überprüfen ... das geht aber nur wenn der copy befehl von links nach rechts kopiert ... wenn nicht hast die Nachkommastellen im integer ... des wär bled http://overclockers.gamers.at/ubb/smilies/biggrin.gif !!! Wenns net klappt hat sags dann schau i in meine Bücher nach ! ------------------ - Hatzki <IMG SRC="http://cwm.ragesofsanity.com/s/cwm2/Up_to_something.gif" border=0> KeeP on plaYing
|
vEspertine
offline..
|
@hatzki.. i glaub des wird net funken.. @lacto versuchs mit typcasting: intvariable=(int)floatvariable; ------------------ greetz $kawar$ ..
|
fleshmark
GameDev
|
kann man nicht so die nachkommastelle nach unten "wegrunden"? weiss leider keinen befehl auswendig
-fleshmark
|
Lactobacillus
Addicted
|
Das Problem hab' ich gelöst, jetzt plagt mich ein anderes: Wenn ich float=float+(1/Int) oder float=float+(1/2) schreibe und dann mir float per cout ausgeben lasse, dann hat float den ursprünglichen Wert. Beispiel: #include <stdio.h> #include <iostream.h>
void main () { float floatvariable(0.5);
floatvariable=floatvariable+(1/2); cout<<floatvariable; //sollte IMHO ja 1 sein (0.5 + 0.5 = 1) }
|
fleshmark
GameDev
|
wennst floatzahl=floatzahl+(1.0/2.0) schreibst gehts.. is komisch, ich weiss
-fleshmark
|
Hatzki
Pinky in action
|
|
Lactobacillus
Addicted
|
Danke, es funktioniert. Ich habe einmal einen C++-Kurs besucht, aber das meißte vergessen, da ich mich bis dato eher mit Visual Studio Winsock-Programmierung beschäftigt hab. Ich habe u.a. einen Chat nach Client/Server-Model mit Dedicated Server, et cetera gemacht... Nur noch eine Frage: Wenn ich mir mit cout<<Floatvariable; meine Floatvariable ausgeben will, so wird sie nach ein paar Stellen gerundet. D.h. aus 2.6(periodisch) wird 2.66667. Ich möchte aber so viele Nachkommastellen wie möglich anzeigen... Grüße Lactobacillus
|
fleshmark
GameDev
|
weiss net wies beim cout geht, aber beim printf kann man doch so irgendwie mit dem %-zeichen so die formatierung angeben, weiss aber leider nimmer genau wie das geht, tut mir leid..
-fleshmark
|
Lactobacillus
Addicted
|
Mit cout.precision(Wert); funktionierts, aber da bekomme ich nur eine max. 15-stellige Zahl (1 Stelle vor dem Komma, 14 nach dem Komma) heraus. Ich weiß aber nicht, ob es an der Prezision, oder an dem verwendeten Variablentyp liegt... Als Variablentyp verwende ich double.
Wenn wem was einfällt...
Grüße und "Vielen Dank!" Lactobacillus
|
Ringding
Pilot
|
Double speichert nun mal nicht mehr Stellen.
Wenn du übrigens testen willst, ob eine Zahl gerade oder ungerade ist, dann mach's so: (a&1) (für eine Integervariable)
Der Test mit der Division ist saulangsam.
double -> int umwandeln geht problemlos Nachkommastellen abschneiden und bei Fließkommazahlen bleiben geht mit floor() (für positive Zahlen)
|
fleshmark
GameDev
|
|
Lactobacillus
Addicted
|
Nur noch eine Frage: Wie kann ich Befehlszeilenparameter einbauen? Ich möchte, dass das Programm z.B. bei dem Befehlszeilenparameter /? eine Hilfe ausspuckt, Variablen müssen nicht übergeben werden. Also etwas wie (im void main()) if (Parameter == "/?") ... Vielen Dank Lactobacillus
|
Ringding
Pilot
|
main() als main(int argc, char **argv) deklarieren.
dann kannst mit argc die anzahl der argumente (+1 für programmnamen) und mit argv[0], argv[1], ... die argumente ansprechen und halt z.b. mit strcmp("/?", argv[1]) vergleichen
|
Lactobacillus
Addicted
|
Ich wollte mich nocheinmal bedanken, dass man hier so schnelle und kompetente (C++) Hilfe bekommt...
Grüße Lactobacillus PS: Kann mir jemand nur einen Hinweis geben, wie das mit dem Dateizugriff (lesen u. schreiben) vor sich geht?
|