Деление с остатком в PHP

У меня есть часть в моем коде, где мне нужно разделить и иметь остаток вместо десятичного ответа.

Как я могу это сделать?

8 ответов


вы можете делать то, что описываете, используя оператор "%" (modulus). Следующий код является примером деления с остатком.

$remainder=$num % $divideby;
$number=explode('.',($num / $divideby));
$answer=$number[0];
echo $answer.' remainder '.$remainder;

$quotient = intval($dividend / $divisor);
$remainder = $dividend % $divisor;

используя intval вместо floor будет округлять фактор к нулю, обеспечивая точные результаты, когда дивиденд отрицательный.


раствор для положительных и отрицательных чисел:

$quotient = $dividend / $divison;
$integer = (int) ($quotient < 0 ? ceil($quotient) : floor($quotient));
$remainder = $dividend % $divisor;

на математические правильный ответ - это:

$remainder = $dividend % $divisor;
$quotient = ($dividend - $remainder) / $divisor;

и остаток проверяет условие 0 <= $remainder < abs($divisor).

к сожалению, многие языки программирования (включая PHP) не обрабатывают отрицательные числа правильно с математической точки зрения. они использовать разные правила для вычисления значения и знака остатка.

Если вам нужно работать с отрицательными числами и получить математические правильные результаты, то вы можете использовать следующие формулы:

$remainder = (($dividend % $divider) + abs($divider)) % abs($divider);
$quotient = ($dividend - $remainder) / $divider;

они полагаются на то, как PHP вычисляет модуль с отрицательными операндами, и они могут не предоставить правильный результат, если они портированы на другой язык.

здесь скрипт который реализует эти формулы и проверяет результаты по значениям, приведенным в качестве примера в вышеупомянутом математическом правильном ответе.


Если вам нужно найти его, оператор % называется mod (или modulus).


мне пришлось разработать этот подход, потому что мой числитель был плавающим значением, а модуль округлял результаты.

использование подхода Рафаэлло предложил здесь для разделения поплавков и взятия из решения Sam152 выше придумали следующее.

$a = 2.1;
$b = 8;
$fraction = $a / (float) $b;
$parts = explode('.', $fraction);                
$int = $parts[0];
$remainder = $score - ($int*$b) ;  

используйте эту функцию своим массивом Описание: массив gmp_div_qr ( resource $n , resource $d [, int $round ] )

The function divides n by d .

ссылка:http://php.net/manual/en/function.gmp-div-qr.php


пример для отображения строк, таких как 1 час 6 минут, используя floor() и модуль ( % ), если заданы только минуты/секунды:

$minutes=126;

if($minutes < 60) {
    $span= $minutes.' min.';
} else {
    $rem=$minutes % 60;
    $span=floor($minutes/60).' h. '. (($rem>0) ? $rem.' min.':'');
}

// echo 'Hello Jon Doe, we notify you that even will last for 2 h. 6 min.
echo 'Hello Jon Doe, we notify you that event will last for '.$span;