В php:
Модуль% дает остаток от $ x, деленный на $ y.
Я попробовал этот код:
<?php
print(100000000165 % 5);
результат 2
так как должно быть 0
Это происходит потому, что вы работаете в 32-битной системе.
Наибольшее целое число в 32-битном php 2147483647
, Это означает, что после этого (начиная с 2147483648
) это переполнение и обертывания.
Ваш номер больше этого, и поэтому результат: (100000000165 % 2147483648) % 5
=> 1215752357 % 5
=> 2
Дополнение: Вы можете построить функцию модуля самостоятельно и иметь дело с плавающими
$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.
Других решений пока нет …