Разделение с остатком в PHP - PullRequest
9 голосов
/ 23 февраля 2009

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

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

Ответы [ 8 ]

18 голосов
/ 23 февраля 2009
$quotient = intval($dividend / $divisor);
$remainder = $dividend % $divisor;

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

13 голосов
/ 23 февраля 2009

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

$remainder=$num % $divideby;
$number=explode('.',($num / $divideby));
$answer=$number[0];
echo $answer.' remainder '.$remainder;
5 голосов
/ 23 февраля 2009

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

$quotient = $dividend / $divison;
$integer = (int) ($quotient < 0 ? ceil($quotient) : floor($quotient));
$remainder = $dividend % $divisor;
2 голосов
/ 24 ноября 2015

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

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

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

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

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

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

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

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

1 голос
/ 23 февраля 2009

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

0 голосов
/ 02 января 2018

Пример для отображения строк, таких как 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;
0 голосов
/ 14 января 2015

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

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

$a = 2.1;
$b = 8;
$fraction = $a / (float) $b;
$parts = explode('.', $fraction);                
$int = $parts[0];
$remainder = $score - ($int*$b) ;  
0 голосов
/ 07 декабря 2012

Используйте эту функцию как массив Описание массив 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...