In php: gibt der Modul% Rest von $ x dividiert durch $ y.Modul% geben 2 anstelle von 0
Ich habe diesen Code tryed:
<?php
print(100000000165 % 5);
Ergebnis ist 2 da es 0
In php: gibt der Modul% Rest von $ x dividiert durch $ y.Modul% geben 2 anstelle von 0
Ich habe diesen Code tryed:
<?php
print(100000000165 % 5);
Ergebnis ist 2 da es 0
sein soll Dies geschieht, weil Sie auf einem 32-Bit-System arbeiten.
Die größte ganze Zahl in 32bit php ist 2147483647
. Das heißt danach (beginnend mit 2147483648
) ist es ein Überlauf und Wraps.
Ihre Zahl ist größer als das, und so ist das Ergebnis: (100000000165 % 2147483648) % 5
=>1215752357 % 5
=>2
Addition: Sie können die Modul-Funktion selbst bauen und mit Schwimmern beschäftigen
$largeNumberThatBreaksInteger = 10000000000000000000165;
$modulus = $largeNumberThatBreaksInteger/PHP_INT_MAX - (int)($largeNumberThatBreaksInteger/PHP_INT_MAX) * PHP_INT_MAX;
// results in something like -9.9981352879506E+21. So you can compare it with an epsilon and know if it's 0 or not.
Bei meinem System ist es "0". Verwenden Sie eine 32-Bit- oder 64-Bit-Version von PHP? –
Sie laufen wahrscheinlich auf einem 32-Bit-PHP, in dem der größte Int etwa 2 Milliarden ist. Darüber hinaus wickeln sich die Zahlen um, und 100000000165 wird 1215752357. – cHao