quakenet:#php Tutorial

Author: Progman, zuletzt bearbeitet von progman @ 2005/03/25 15:31:19

Bitte beachten Sie, dass die Tutorialkapitel zusammenhängen. Wenn sie direkt auf ein Kapitel verlinkt wurden müssen Sie gegebenenfalls die vorherigen Kapitel auch lesen. Achten Sie beim lesen darauf, dass Sie kein Kapitel überspringen.

Zahlen

  1. Der Variablentyp Zahlen
  2. Integer-Zahlen
  3. Float-Zahlen
  4. Warum solch eine Trennung?

1. Der Variablentyp Zahlen

Wir kennen momentan nur den Variablentyp "String". Doch mit Strings kann man schlecht rechnen. "hallo" mit "du" zu multiplizieren geht nicht so ganz.

In PHP gibt es 2 Zahlentypen. Einmal sind das Integer-Zahlen und einmal die Float- bzw. Double-Zahlen.

2. Integer-Zahlen

Integer-Zahlen sind ganze Zahlen ohne Nachkommastellen, also z.B. 5, 7 oder 134, aber auch negative Zahlen wie -345, -1 oder -63. Diesen Wert kann man ganz einfach einer Variablen zuweisen oder aber auch diese direkt mit echo ausgeben.

<?php
    $name
= 5;
    echo
"Die Zahl hat den Wert ".$name."\n";
    echo
100;
?>

3. Float-Zahlen

Float-Zahlen sind Zahlen mit Nachkommastellen, wie 345.564, 2.56, 5.0 oder -34.204235. Wie die Integer-Zahlen können auch die Float-Zahlen in Variablen gespeichert werden und auch mit echo ausgegeben werden.

<?php
    $g
= 9.81;
    echo
"Die Erdbeschleunigung beträgt ".$g." m/s²\n";
?>

Bei Float-Zahlen muss man beachten, dass das Kommazeichen ein Punkt ist. Das Kommazeichen ist nämlich schon für die Trennung der Parameter einer Funktion belegt.

<?php
    xyz
(5.6);  // ein Parameter mit der Floatzahl 5.6
    
abc(5,6);  // zwei Parameter mit den Integerzahlen 5 und 6
               // deswegen sollte man die Parameter auch
               // mit einem Leerzeichen trennen
    
abc(5, 6); // -> wie abc(5,6);
?>

Es gibt aber noch ein Problem. Den Punkt kennen wir als Verkettungsoperator. Dies kann zu Problemen führen. Wir können nicht einfach die Zahlen 4 und 6 zusammenfügen. Wenn wir diese Zahlen zusammenfügen wollen gibt es zwei Möglichkeiten.

  1. Man kann die Zahlen oder Ziffern vorher in Variablen speichern. Danach kann man die Variablen mit dem Verkettungsoperator zusammenfügen.

    <?php
        $einer
    = 4;
        
    $zehner = 5;
        echo
    $zehner.$einer;
    ?>
  2. Wenn man zwei Integer-Werte zusammenschreiben möchte, muss man zwischen dem Verkettungsoperator und den Zahlen ein Leerzeichen lass. Dann erkennt der PHP-Interpreter diese nicht als Float-Zahl sondern als zwei unabhängige Zahlen die zusammengefügt werden sollen.

    <?php
        
    echo 4 . 5; // Ausgabe 45
        
    echo 4.5; // Ausgabe 4.5
    ?>

Das ist aber nur Nice-To-Know, denn Ziffern zu verbinden braucht man nicht so oft.

4. Warum solch eine Trennung?

Da fragt man sich doch warum es diese 2 Variablentypen gibt. Man kann doch einfach alle Zahlen in den float-Typ speichern. Das liegt an der internen Speicherung der Zahlen. Man will ja so wenig Speicher wie möglich verbrauchen. Die Integer-Zahlen werden, abhängig vom System, in ein 32-Bit Feld gespeichert. Mit 32-Bit kann man Zahlen von ungefähr -2147483647 bis +2147483647 speichern. Jedes Bit steht für eine Zahl. Das Bit 1 steht für 1, das Bit 2 für 2, das Bit 3 für 4, das Bit 4 für 8 ... . Wenn an diesem Bit dann eine 1 oder 0 steht, so wird der entsprechende Wert zur Zahl addiert. Das hier ist z.B. eine 32-Bit Speicherzelle.

Bit 32                       Bit 1
|                              |
00000000000000000000000001100101
        

Dann hat diese Speicherzelle den Wert 101.

Bit 32                       Bit 1
|                              |
00000000000000000000000001100101
                   64----'||||||
                   32-----'|||||
                   16------'||||
                    8-------'|||
                    4--------'||
                    2---------'|
                    1----------'
        

Es werden nur die Zahlen addiert, wo eine 1 Steht. In diesem Fall ist das 1 + 4 + 32 + 64, und das ist 101. Dies ist nur ein kleiner Ausflug, wie eine Integer-Zahl intern gespeichert wird.

Float-Zahlen werden hingegen anders gespeichert. Sie belegen auch ein 32-Bit Feld. Doch da repräsentiert nicht jedes Bit eine Zahl die dann zusammengezählt werden. So ein 32-Bit Feld wird dann in 2 Gruppen unterteilt und durch irgendwelche ISO-Definitionen wird der eine Teil der Exponten einer 2er-Potenz und der andere Teil eine Nachkommastelle, womit diese dann mit der ausgerechneten 2er-Potenz ausgerechnet wird. Dies ist also total kompliziert. Ich müsste ein eigenes Tutorial schreiben, nur um zu erklären wie eine solche Float-Zahl im Speicher hinterlegt wird. Aber der Vorteil einer solchen Speicherung ist der Bereich, welche Zahlen gespeichert werden können. Die liegt einmal bei ca. +/- 1.8 mal 10 hoch 308 und es können Kommazahlen gespeichert werden, wie 0.5 und 3.1415, was bei den Integer-Zahlen nicht geht.

Wenn man versucht eine so große ganzzahlige Zahl in eine Variable zu speichern, die in einer Integer-Zahl nicht mehr passen würde, wandelt PHP diese automatisch in eine Float-Zahl um.

<?php
    $var
= 2147483647; // maximale Größe einer Integer Zahl
    // $var ist vom Typ Integer (int)

    
$var = 2147483648;
    
// $var ist nun vom Typ Float oder Double (float)
?>

Dieses Wissen sollte man im Hintergrund behalten. Doch dies ist eigentlich nicht so wichtig. Mit so großen Zahlen hantiert man in der Regel recht selten.

Fragen zum aktuellen Thema

  1. Welche beiden Zahlentypen gibt es?
  2. Was muss man bei Float-Zahlen beachten?
Welche beiden Zahlentypen gibt es?

Es gibt einmal die Integer Zahlen und die Float Zahlen.

Was muss man bei Float-Zahlen beachten?

Das Komma für die Float-Zahlen ist ein Punkt. Mit Komma hingegen trennt man die Parameter einer Funktion. Des Weiteren muss man beachten, dass der Punkt auch als Verkettungsoperator gilt.

Nach oben