Komischer Sonderfall in If-Abfrage

maxOn-line

Grünschnabel
Servus,

ich hab ne for schleife which looks like this..

PHP:
for ($p=$a; $p < $Arr["X"]+$a-$A; $p+=$a){

  if ($p >= $Arr["X"]-$A){
	$p = $Arr["X"]-$A;
	$quit = true;
       print("quit");
  }

// Dazwischen dann ein wenig Rechnerei und Verarbeitung der Werte..

  if ($quit){   break;  }
}

Da kommen fuer a dann Werte wie z.B. 0.2 rein und $Arr["X"] ist zB. 3 und $A auch 0.2.

Wenn die schleife das erste mal durchläuft bricht er bei erst bei $p > $Arr["X"]-$A
ab, obwohl der Fall $p == $Arr["X"]-$A eine runde vorher auch entrifft.

Die Schleife wird wiederum in einer schleife aufgerufen und wenn die in die 2te Runde geht beachtet er den Fall $p == $Arr["X"]-$A, wie es eigentlich auch in der ersten schon der Fall sein sollten...

Lange Rede kurzer Sinn... was machen?

kann doch eigentlich net sein. Wenn ich mir die entsprechenden Werte vor der Abfrage ausgeben lasse sind Sie so wie sie sein sollten.. nicht, dass jmd. denkt Sie wuerden innerhalb der Schleife nocheinaml verändert..oder hab ich hier jetz was total dummes übersehen?

Gruß, maxon
 
maxOn-line hat gesagt.:
...nicht, dass jmd. denkt Sie wuerden innerhalb der Schleife nocheinaml verändert..oder hab ich hier jetz was total dummes übersehen?


jo...hast du :-)

Code:
$p = $Arr["X"]-$A;

...da wird $p innerhalb der Schleife verändert.
 
..hehe auch ncoh wach :suspekt: !?

Sven Mintel hat gesagt.:
jo...hast du :-)

Code:
$p = $Arr["X"]-$A;

...da wird $p innerhalb der Schleife verändert.

ich meinte natürlich innerhalb der Schleife außerdem was ich gepostet habe ;-].

Genau aus dem $p = $Arr["X"]-$A; grund habe ich ja auch das break wieter unten.. da wenn des $p geändert wird der keine doppelten Faxen macht sondern danach auch abbricht. Ich lasse in dem Fall ja die If schleife nicht ganz durch laufen .. sondern will eine runde vorher raus.

Aber des eigentlich problem ist halt dass er wenn die for schleife zum ersten mal aufgereufen wird nciht abbricht wenn $p == $Arr["X"]-$A und wenn sie danach nochmal aufgerufen wird bricht sie bei dem Gleicheitsfall schon ab.. is doch irgendwie .. nä? :-)

gn8

mfg, maxon
 
Jo..bin noch wach, war arbeiten :-)

Also bei mir bricht die Schleife ordnungsgemäss bei 2.8 ab....
Code:
<?php
$Arr  = array('X'=>3);
$quit = false;
$A=$a=0.2;

for ($p=$a; $p < $Arr["X"]+$a-$A; $p+=$a){
print('<br>'.$p);

  if ($p >= $Arr["X"]-$A){
    $p = $Arr["X"]-$A;
    $quit = true;
       print("-quit");
  }

// Dazwischen dann ein wenig Rechnerei und Verarbeitung der Werte..

  if ($quit){   break;  }
}
?>

..vielleicht ist dein Denkfehler, dass die Schleife nicht abgebrochen wird, wo du "quit" ausgibst, sondern erst später.
 
Hi, hatte mich dann doch schon in die Waagerechte begebn :).

Hast vollkommen recht , das geht bei mir auch .. aber probier das mal:

PHP:
<?php
$Arr  = array('X'=>2);
$quit = false;
$A=$a=0.2;

for ($p=$a; $p < $Arr["X"]+$a-$A; $p+=$a){
print('<br> P ='.$p.'<br>');
print('Arr -A ='.($Arr["X"]-$A).'<br>');

  if ($p >= $Arr["X"]-$A){
	print("quit at p:".$p);
    $p = $Arr["X"]-$A;
    $quit = true;
  }

// Dazwischen dann ein wenig Rechnerei und Verarbeitung der Werte..

  if ($quit){   break;  }
}
?>

Da geht es nicht und bei genauerem nachschaun ist es bei mir auch genau immer der Fall "1.8" bei dem die Schleife eine Runde zu viel macht... kann das n php interner Fehler sein .. oder an der Version liegen? Teste das mit dem so weit ich weiss aktuellen XAMPP Paket.

Bin da echt ratlos.. mit 3 läufts richtig.. mit 2 als Wert im Array machts faxen.

Vielleicht kennt ja noch wer so komische Probs... oder weiss wie man's umgehen kann.

Gruß, maxon

ps: Kann es sein, dass ich hir das Wort "f.u.n.z.t" nicht nutzen darf? Kickt der mir raus wenn ich poste..?!
 
Zuletzt bearbeitet:
Mmmh, merkwürdig, ich kenn das bisher nur von Javascript, dass da bei simplen Rechenoperationen etwas anderes herauskommt, als erwartet, liegt wohl daran, dass da intern mit einem anderen Zahlentyp gerechnet wird.

Probiers mal mit [phpf]bccomp[/phpf]

Code:
if (bccomp($p,$Arr["X"]-$A,1)>-1)
 
Jo scheint zu funktionieren!

Vielen Dank für die Hilfe. "bccomp" kannte ich noch nicht.. ist ja eigentlich ne sehr angenehme Art Wete zu vergleichen.

Gibt es denn eigentlich die Möglichkeite sich in PHP "einen Blick hinter die Kulission" zu verchaffen, also dassich mir interne Rechnerei und Verarbeitung genau ausgeben lassen kann. Mit getType bin ich da nicth weit gekommen :-) .

greetz, maxon
 
Zurück