Деление с остатком в 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 вычисляет модуль с отрицательными операндами, и они могут не предоставить правильный результат, если они портированы на другой язык.
здесь скрипт который реализует эти формулы и проверяет результаты по значениям, приведенным в качестве примера в вышеупомянутом математическом правильном ответе.
мне пришлось разработать этот подход, потому что мой числитель был плавающим значением, а модуль округлял результаты.
использование подхода Рафаэлло предложил здесь для разделения поплавков и взятия из решения 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 .
пример для отображения строк, таких как 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;