Signatur
Beschreibung
gmp_intval() konvertiert eine GMP-Zahl (ein GMP-Objekt) in einen nativen PHP-Integer. Damit lässt sich das Ergebnis von GMP-Berechnungen direkt in Kontexten verwenden, die einen einfachen int erwarten – etwa beim Übergeben an Nicht-GMP-Funktionen oder beim direkten Vergleich mit regulären PHP-Ganzzahlen.
Die Funktion akzeptiert neben GMP-Objekten auch direkte Ganzzahlen und numerische Strings, was die Nutzung in gemischten Szenarien vereinfacht. Wenn der übergebene Wert in den Bereich eines PHP-Integers passt, gibt die Funktion den exakten Wert zurück.
Wichtig: PHP-Integers sind plattformabhängig entweder 32 Bit oder 64 Bit groß. Überschreitet die GMP-Zahl den darstellbaren Bereich (auf 64-Bit-Systemen also größer als PHP_INT_MAX bzw. kleiner als PHP_INT_MIN), wird nur der Wert modulo 2^Wortgröße zurückgegeben – es erfolgt kein Fehler oder eine Warnung. Für große Zahlen sollte daher besser gmp_strval() verwendet werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $num Pflicht | GMP|int|string | Eine GMP-Zahl als GMP-Objekt, als Integer oder als numerischer String, der in einen Integer umgewandelt werden soll. |
Rückgabewert
int zurück. Bei Überschreitung des Integer-Bereichs wird das Ergebnis abgeschnitten (modulo 2^Wortgröße), ohne Fehler oder Warnung.Beispiele
Einfache GMP-Zahl in Integer umwandeln
<?php
$gmp = gmp_init('42');
$int = gmp_intval($gmp);
var_dump($int); // int(42)
$gmp2 = gmp_add(gmp_init(100), gmp_init(200));
echo gmp_intval($gmp2); // 300
?>
Ergebnis einer GMP-Berechnung als Integer weiterverwenden
<?php
// Fakultät von 10 berechnen
$result = gmp_fact(10);
echo 'GMP-Objekt: ';
var_dump($result);
$intVal = gmp_intval($result);
echo 'Als Integer: ' . $intVal . PHP_EOL;
// Weiterverwenden in einer normalen PHP-Funktion
$formatiert = number_format($intVal, 0, ',', '.');
echo 'Formatiert: ' . $formatiert . PHP_EOL;
?>
Überlauf bei sehr großen GMP-Zahlen (Fallstrick)
<?php
// Eine Zahl größer als PHP_INT_MAX (auf 64-Bit-System: 9223372036854775807)
$gross = gmp_pow(gmp_init(2), 64); // 2^64 = 18446744073709551616
echo 'GMP-Wert: ' . gmp_strval($gross) . PHP_EOL;
$int = gmp_intval($gross);
echo 'Als Integer (abgeschnitten): ' . $int . PHP_EOL;
// Für große Zahlen besser gmp_strval() verwenden:
echo 'Als String (korrekt): ' . gmp_strval($gross) . PHP_EOL;
?>
// Wichtig · Fallstricke
Überlauf-Gefahr: gmp_intval() gibt bei Zahlen, die den PHP-Integer-Bereich überschreiten, stillschweigend einen falschen Wert zurück (Ergebnis modulo 2^Wortgröße). Es wird weder eine Warnung noch eine Exception ausgelöst. Für sehr große Zahlen sollte stets gmp_strval() genutzt werden, um den vollständigen Wert als String zu erhalten.
Auf 32-Bit-Systemen liegt der maximale darstellbare Integer-Wert bei 2147483647 (ca. 2 Milliarden), auf 64-Bit-Systemen bei 9223372036854775807. Die Funktion verhält sich je nach Plattform unterschiedlich, was zu schwer zu findenden Bugs führen kann.