2017-09-25 2 views
1

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

+1

Bei meinem System ist es "0". Verwenden Sie eine 32-Bit- oder 64-Bit-Version von PHP? –

+0

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

Antwort

1

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. 

Dealing with floats and epsilon

Verwandte Themen