0.07*100 ungleich 7 ?
*Alex*
- php
0 Gunnar Bittersmann
0 *Alex*
0 MudGuard
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" <FONT COLOR=#ff0000>$Ergebnis = $Test2[$i]</FONT><BR>";
else echo" |$Ergebnis| ≠ |{$Test2[$i]}|<BR>";
}
echo"<BR>Noch andere merkwü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" <FONT COLOR=#ff0000>$Ergebnis = $Test2[$i]</FONT><BR>";
else echo" |$Ergebnis| ≠ |{$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" <FONT COLOR=#ff0000>$Ergebnis = $Test2[$i]</FONT><BR>";
else echo" |$Ergebnis| ≠ |{$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" <FONT COLOR=#ff0000>$Ergebnis = $Test2[$i]</FONT><BR>";
else echo" |$Ergebnis| ≠ |{$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*
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
Du hättest damit anfangen sollen, die FAQ zu lesen. Besonders die letzte.
oops, ... Da hätt ich wirklich drauf kommen sollen ...
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