*Alex*: 0.07*100 ungleich 7 ?

Hallo Ihr alle

Bevor ich anfange großartig unverständliche Komplikationen zu berichten, hier ein bisschen Code, den Ihr mal an Euren Server verfüttern könnt.
Wenn bei Euch auch |7| ungleich |7| etc.
herauskommt und Ihr eine Idee habt, woran das liegt, wäre ich über Erklärungen dankbar.

  
<?php  
echo"Man achte auf die Sieben:<BR>";  
$Test=array(0.01,0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.09,0.10);  
$Test2=array(1,2,3,4,5,6,7,8,9,10);  
for($i=0;$i<count($Test);$i++){  
  echo"{$Test[$i]} * 100 = ";  
  $Ergebnis = $Test[$i]*100;  
  echo $Ergebnis;  
  if($Test[$i]*100==$Test2[$i])   //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Dies hier ist die springende Zeile  
   echo"&nbsp;&nbsp;&nbsp;&nbsp; <FONT COLOR=#ff0000>$Ergebnis = $Test2[$i]</FONT><BR>";  
  else echo"&nbsp;&nbsp;&nbsp;&nbsp; |$Ergebnis| &ne; |{$Test2[$i]}|<BR>";  
}  
  
echo"<BR>Noch andere merkw&uuml;rdige Zahlen:<BR>";  
  
$Test=array(-1.14,-1.1,-0.55,-0.07,0.07,0.28,0.55,1.1,1.14);  
$Test2=array(-114,-110,-55,-7,7,28,55,110,114);  
for($i=0;$i<count($Test);$i++){  
  echo"{$Test[$i]} * 100 = ";  
  $Ergebnis = $Test[$i]*100;  
  echo $Ergebnis;  
  if($Test[$i]*100==$Test2[$i])   //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Dies hier ist die springende Zeile  
   echo"&nbsp;&nbsp;&nbsp;&nbsp; <FONT COLOR=#ff0000>$Ergebnis = $Test2[$i]</FONT><BR>";  
  else echo"&nbsp;&nbsp;&nbsp;&nbsp; |$Ergebnis| &ne; |{$Test2[$i]}|<BR>";  
}  
  
echo"<BR>Und so rum funktionierts:<BR>";  
  
$Test=array(0.01,0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.09,0.10);  
$Test2=array(1,2,3,4,5,6,7,8,9,10);  
for($i=0;$i<count($Test);$i++){  
  echo"{$Test[$i]} * 100 = ";  
  $Ergebnis = $Test[$i]*100;  
  echo $Ergebnis;  
  if($Test[$i]==$Test2[$i]/100)   //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Dies hier ist die springende Zeile  
   echo"&nbsp;&nbsp;&nbsp;&nbsp; <FONT COLOR=#ff0000>$Ergebnis = $Test2[$i]</FONT><BR>";  
  else echo"&nbsp;&nbsp;&nbsp;&nbsp; |$Ergebnis| &ne; |{$Test2[$i]}|<BR>";  
}  
  
echo"<BR><BR>";  
  
$Test=array(-1.14,-1.1,-0.55,-0.07,0.07,0.28,0.55,1.1,1.14);  
$Test2=array(-114,-110,-55,-7,7,28,55,110,114);  
for($i=0;$i<count($Test);$i++){  
  echo"{$Test[$i]} * 100 = ";  
  $Ergebnis = $Test[$i]*100;  
  echo $Ergebnis;  
  if($Test[$i]==$Test2[$i]/100)   //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Dies hier ist die springende Zeile  
   echo"&nbsp;&nbsp;&nbsp;&nbsp; <FONT COLOR=#ff0000>$Ergebnis = $Test2[$i]</FONT><BR>";  
  else echo"&nbsp;&nbsp;&nbsp;&nbsp; |$Ergebnis| &ne; |{$Test2[$i]}|<BR>";  
}  
?>  

Merwürdig oder?

Wisst Ihr, wieso 0.07*100 nicht 7 gibt, 7/100 aber sehr wohl 0.07?

Also ich freu mich über Eure Antworten

*Alex*

  1. Hello out there!

    Bevor ich anfange großartig unverständliche Komplikationen zu berichten,

    Du hättest damit anfangen sollen, die FAQ zu lesen. Besonders die letzte.

    See ya up the road,
    Gunnar

    --
    “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
    1. Du hättest damit anfangen sollen, die FAQ zu lesen. Besonders die letzte.

      oops, ... Da hätt ich wirklich drauf kommen sollen ...

  2. Hi,

    Bevor ich anfange großartig unverständliche Komplikationen zu berichten, hier ein bisschen Code, den Ihr mal an Euren Server verfüttern könnt.
    Wenn bei Euch auch |7| ungleich |7| etc.
    herauskommt und Ihr eine Idee habt, woran das liegt, wäre ich über Erklärungen dankbar.

    Willkommen in der Welt der Fließkomma-Arithmetik.

    Nicht alle Zahlen sind (egal in welchem Zahlensystem) mit einer endlichen Zahl von Ziffern darstellbar.
    Für Variablen wird üblicherweise ein endlicher Speicherbereich reserviert.
    ==> Zahlen werden zwangsläufig abgeschnitten.

    Zahlen, die in einem System eine endliche Darstellung haben, müssen in einem anderen nicht zwangsläufig auch eine endliche Darstellung haben.

    Beispiel: 1/3 ist im 3er-System als 0.1 endlich, im 10er-System dagegen 0.33333... unendlich.

    0.07 ist im Dezimal-(10er)-System endlich. In den meisten Computersprachen werden Zahlen in einem binären (2er) System dargestellt - und da ist 0.07 IIRC nicht endlich darstellbar (0.000100011 usw.)
    Selbst wenn sie endlich darstellbar ist, kann es zu Problemen kommen, wenn die endliche Darstellung mehr Ziffern braucht als zur Verfügung stehen ...

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.