Start · Sprachen · PHP · Referenz · gmp_intval

gmp_intval

Funktion

Wandelt eine GMP-Zahl in einen nativen PHP-<code>int</code> um.

seit PHP 4.0.4 Kategorie: math

Signatur

gmp_intval(GMP|int|string $num): int

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

Typ
int
Beschreibung
Gibt den Wert der GMP-Zahl als nativen PHP-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
?>
int(42) 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;
?>
GMP-Objekt: object(GMP)#1 (1) { ["num"]=> string(7) "3628800" } Als Integer: 3628800 Formatiert: 3.628.800

Ü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;
?>
GMP-Wert: 18446744073709551616 Als Integer (abgeschnitten): 0 Als String (korrekt): 18446744073709551616

// 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.