• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

c++

RRA^StArFiRe

Guest
Tagschn
folgendes prob:

ich hab aus ner schleife ne variable "const double c= ..."
diese variable is ne kommazahl
wie kann ich jetzt überprüfen, ob diese zahl ganzzahlig ist?

c%1
(cmod1)
bringt nix, weil mod nur mit integers geht...
und ne überprüfung wie if(c==0){} bringt auch nix, weil man hier n double mit nem integer vergleicht, was nie true ergibt.

hat jemand ne ahnung??
 
Mitglied seit
02.08.2002
Beiträge
2.781
Reaktionen
0
ich habe keine ahnung von C aber in pascal geht dies mit der function fract(), die den nachkommateil zurückgibt.

evtl hat c einen ähnliche funktion, so dass du

if (fract(c) == 0) {
...
}

schreiben könntest
 

Wiseguy3

Guest
Multipliziers halt mit 10 hoch n wobei n die maximale Anzahl der Kommastellen deiner Zahl ist und check dann, ob die Zahl die du da rausbekommst mit n Nullen aufhört. Is aber ungenau und es gibt sicher auch noch ne bessere Lösung.
 

Observator

Guest
Mir fällt da spontan ein:

(c == (int) c)

oder besser verständlich:

( c == (double) ((int) c) )

Geht natürlich nur so einfach wenn c im Zahlenbereich von int ist.

K.A was oder ob es an besseren Möglichkeiten gibt.
 

Atheist2

Guest
Geh davon aus, das real-Typen NIE ganzzahlig sind. Die wahrscheinlichkeit dazu ist sehr gering.
 

Sas~iN~LoVe

Guest
wandels halt in nen string um und guck ob n dezimaltrennzeichen vorkommt :ugly:
 

PvP-BABA-PvP

Guest
versuchs per modulo

ist es mit sich selbst teilbar = ganzzahlig

ist es nicht, dann halt nicht ganzzahlig :P
 
Mitglied seit
19.09.2001
Beiträge
2.379
Reaktionen
17
so wie imperator ist doch gut? int schneidet ab und dann mit double vergleichen und == wäre dann ganzzahlig...
 
Mitglied seit
02.08.2002
Beiträge
2.781
Reaktionen
0
ich würde nen kleinen toleranzbereich einbauen, da z.b. (1 / 3) * 3 nicht 1 sondern 0.99999999 wird

also dann ungefähr so:

if (( c > (double) ((int) (c - 0.000001))) || ( c < (double) ((int) (c + 0.000001))))
 

Atheist2

Guest
Original geschrieben von doMi
so wie imperator ist doch gut? int schneidet ab und dann mit double vergleichen und == wäre dann ganzzahlig...
Ich glaube, 1.0 ist immer noch ungleich 1
 
Mitglied seit
19.09.2001
Beiträge
2.379
Reaktionen
17
haha lol, das wär ja dann auch so das problem :stupid:
 

RRA^StArFiRe

Guest
hihi
jo irgendwie würde es auch so gehen, aber schon ok...
hab einfach den algorithmus n bissl umgestellt und jetz funtzt des
thx für die antworten
 
Mitglied seit
02.08.2002
Beiträge
2.781
Reaktionen
0
ja 1 == (int) 1.1 ist wahr, aber der ausdruck heisst ja auch


a == (int) a und der ist nur wahr wenn a halt gleich dem integerwert von a ist, sprich ganzzahlig ist

evtl muss man den integer zurück in float verwandeln, also a == (float) (int) a schreiben, damits kein typenproblem gibt, aber ich hab halt ka von C :)
 

The_Company

Guest
Original geschrieben von Atheist
Ohne zuviel von C zu verstehen, ist dann nicht auch 1=1.1?
"floatzahl == intzahl" wird intern zu "floatzahl == (float) intzahl" umgewandelt, von daher gilt 1.0 == 1 aber nicht 1.1 == 1.
Es wird immer zum Typ mit der grössten Genauigkeit umgewandelt bei mathematischen Funktionen.

Deshalb ist ja 3 / 2 == 1, aber 3.0 / 2 == 1.5 :o
 
Oben