SELFPHP

SELFPHP-Druckversion
Original Adresse dieser Seite:
http://www.selfphp.de/praxisbuch/praxisbuchseite.php?site=86&group=21
© 2001-2017 E-Mail SELFPHP OHG, info@selfphp.de
© 2005-2017 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de


Zahlen


Zahlen sind der grundlegendste Datentyp überhaupt und benötigen wenig Erläuterung. Es kann sich dabei um ganze Zahlen oder Fließkommazahlen handeln. Ganze Zahlen (Integer) können dezimal, oktal oder hexadezimal geschrieben werden.

Der Datentyp für die Zahlen umfasst:

Achtung: Sie sollten dabei beachten, dass der Punkt hier zur Abtrennung der Nachkommastellen und nicht wie im Deutschen üblich zur Kennzeichnung der Tausenderstellen dient.


Schreibweise von ganzzahligen Werten

Beispiel

$zahleins = 9000;

Dieser Zahlenwert kann auch als Hexadezimalzahl angegeben werden. Um dem PHP-Interpreter anzuzeigen, dass die folgende Zahl eine Hexadezimalzahl ist, stellen Sie dem Zahlenwert das Präfix 0x voran.

Beispiel
$zahlEins = 0x2328; // entspricht dezimal 9000

Und nun zu den Fließkommazahlen:

$zahlzwei = 999.99;

Wie Sie sehen, werden Fließkommazahlen mit einem Punkt zwischen den Vorkomma- und Nachkommastellen geschrieben. Alternativ können Sie Fließkommazahlen auch in der Exponentialschreibweise angeben.

$zahldrei = 999.99e2; // entspricht 99999

Hinweis: Der Buchstabe e wird in Fließkommazahlen zur Kennzeichnung eines nachfolgenden Exponenten zur Basis 10 verwendet. 999.99e2 bedeutet also 999.99 * 10², nicht zu verwechseln mit der Euler'schen Zahl.

PHP-Programme bearbeiten Zahlen, indem sie die arithmetischen Operatoren benutzen, die die Sprache zur Verfügung stellt. Dazu gehören:

Die vollständigen Einzelheiten bezüglich dieser und anderer arithmetischer Operatoren finden sich im Abschnitt 3.6 »Operatoren«. Zusätzlich zu diesen grundlegenden mathematischen Operationen unterstützt PHP komplizierte mathematische Operationen durch eine große Anzahl an mathematischen Funktionen, die zu den Kernbestandteilen der Sprache gehören.

Beispiel
// Sinus von x berechnen
$sinusx = sin($x);

Die Anweisung ermöglicht es Ihnen, den Sinus eines Zahlenwerts x zu berechnen. Im Abschnitt der praktischen Anwendungsbeispiele werde ich Ihnen einige nützliche Formeln zeigen.{PSP}Integer-Typen

In der Mathematik würde der Integer-Typ dem Wertebereich aus der Menge Z = {..., -2, -1, 0, 1, 2, ...} entsprechen. Wie bereits gesagt, können Ganzzahlen in dezimaler
(10-basierter), hexadezimaler (16-basierter) oder oktaler (8-basierter) Schreibweise angegeben werden, wahlweise mit einem vorangestellten -/+-Zeichen. Schreibweisen:

Beispiel

<?php
// Dezimalzahl
$zahl = 1234;
echo $zahl;

// Negative Zahl
$zahl = -123;
echo $zahl;

// Oktalzahl (87)
$zahl = 0127;
echo $zahl;

// Hexadezimalzahl (255)
$zahl = 0xFF;
echo $zahl;
?>

Die Größe eines Integer-Werts ist von der jeweiligen Plattform abhängig, ein Maximalwert von ungefähr zwei Milliarden ist jedoch üblich (32 Bit).


Integer-Überlauf

Sollten Sie eine Zahl jenseits der Grenzen des Typs integer angeben, wird diese als Typ float interpretiert. Wenn Sie eine Operation ausführen, deren Ergebnis eine Zahl jenseits der Grenzen des Typs integer ist, wird ebenso eine Zahl vom Typ float zurückgegeben.

Beispiel

<?php
// Ausgabe: int(2147483647)
$zahl = 2147483647;
var_dump($zahl);

// Ausgabe: float(2147483648)
$zahl = 2147483648;
var_dump($zahl);
?>

Dies gilt auch für Integer in hexadezimaler Schreibweise,

Beispiel

<?php
// Ausgabe: int(2147483647)
var_dump(0x7fffffff);

// Ausgabe: float(2147483648)
var_dump(0x80000000);
?>

und für Integer, welche aus einer Rechenoperation resultieren.

Beispiel

<?php
// Ausgabe: float(1.0E+11)
$zahl = 100000 * 1000000;
var_dump($zahl);
?>

In PHP gibt es keinen Operator für Integer-Divisionen. 1/2 ergibt 0.5.

Beispiel

<?php
// Ausgabe: float(0.5)
var_dump(1/2);
?>
{PSP}Umwandlung in Integer-Wert

Um einen Wert ausdrücklich in einen Integer zu konvertieren, benutzen Sie entweder die Umwandlung mittels (int) oder (integer). In den allermeisten Fällen ist es jedoch nicht notwendig, die Umwandlung selbst vorzunehmen. Ein Wert wird automatisch konvertiert, falls ein Operator, eine Funktion oder eine Kontrollstruktur ein Integer-Argument erfordert.

Beispiel

<?php
// Ausgabe (10)
echo (int) 10.99;
// Ausgabe (10)
echo (integer) 10.99;
?>


Booleans in Integer

False ergibt 0 (Null), und true ergibt 1 (eins).

Beispiel

<?php
// Boolean
echo (int) true; // 1
echo (int) false; // 0
?>


Fließkommazahlen in Integer

Bei der Umwandlung von float nach integer wird die Zahl in Richtung Null gerundet.

Beispiel

<?php
// Ausgabe (9999)
echo (int) 9999.4567;
?>

Wenn der float jenseits der Grenzen von integer liegt (üblicherweise +/- 2.15e+9 = 2^31), ist das Ergebnis nicht definiert, da float nicht genug Präzision besitzt, um ein genaues integer-Ergebnis zu liefern. Keine Warnung oder Fehlermeldung wird in diesem Fall ausgegeben.

Sie sollten nie einen Teilausdruck nach integer umwandeln, da dies in einigen Fällen zu unerwarteten Ergebnissen führen kann.

Beispiel

<?php
// Ausgabe (8)
echo ( (0.7+0.1) * 10 );
// Ausgabe (7)
echo (int) ( (0.7+0.1) * 10 );
?>


Strings in Integer

Natürlich lassen sich auch Zeichenketten in Integer umwandeln.
<?php
// Ausgabe (10)
echo 2 * "5 Äpfel";

// Ausgabe (6)
echo "5 Autos " + 1;

// Ausgabe (1)
echo 1 + "C-64";
?>
{PSP}Float-Typen

Fließkommazahlenwerte, auch als floats, doubles oder reelle Zahlen bezeichnet, können durch eine der folgenden Anweisungen zugewiesen werden:

<?php
// Ausgabe (1.234)
$wert = 1.234;
echo $wert;

// Ausgabe (1200)
$wert = 1.2e3;
echo $wert;

// Ausgabe (7E-10)
$wert = 7E-10;
echo $wert;
?>

Die Größe einer Fließkommazahl ist plattformabhängig, dennoch stellt ein Maximum von ~1.8e308 mit einer Genauigkeit von 14 Nachkommastellen einen üblichen Wert dar (das entspricht 64-Bit im IEEE-Format).


Fließkomma-Präzision

Es ist ziemlich normal, dass einfache Dezimalzahlen wie 0.1 oder 0.7 nicht in ihre internen binären Entsprechungen konvertiert werden können, ohne einen kleinen Teil ihrer Genauigkeit zu verlieren. Das kann zu verwirrenden Ergebnissen führen.

<?php
// Ausgabe (7)
echo floor((0.1 + 0.7) * 10)
?>

Sie haben sicher 8 erwartet. Dieses Ergebnis stützt sich auf die Tatsache, dass es unmöglich ist, einige Dezimalzahlen durch eine endliche Anzahl an Nachkommastellen darzustellen. Dem Wert 1/3 entspricht z. B. der interne Wert von 0.3333333. Daher sollten Sie nie den Ergebnissen von Fließkomma-Operationen bis auf die letzte Nachkommastelle trauen und sie lieber auf Gleichheit prüfen.

Tipp: Benötigen Sie eine größere Genauigkeit, sollten Sie die mathematischen Funktionen beliebiger Genauigkeit oder die Gmp-Funktionen verwenden.