Модуль% дает 2 вместо 0

В php:
Модуль% дает остаток от $ x, деленный на $ y.

Я попробовал этот код:

<?php
print(100000000165 % 5);

результат 2
так как должно быть 0

1

Решение

Это происходит потому, что вы работаете в 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.

Работа с поплавками и эпсилоном

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]