Php除法,无小数分隔结果
我想做的是:Php除法,无小数分隔结果,php,Php,我想做的是: $numbertodivise = 500; 500 / 3 = 166,66 我想将数字除以最公平的部分和最后一部分以增加差异,例如: 500 / 3 will give me : $result1 = 166 $result2 = 166 $result3 = 168 我想要每个除法的代码,最好的方法是什么?这里我提取了数字除法的余数,例如,如果模为3,则为2,然后我将除法的整数部分进行除法并提取出来,这样我就可以将余数添加到最后一个除法的数字
$numbertodivise = 500;
500 / 3 = 166,66
我想将数字除以最公平的部分和最后一部分以增加差异,例如:
500 / 3 will give me :
$result1 = 166
$result2 = 166
$result3 = 168
我想要每个除法的代码,最好的方法是什么?这里我提取了数字除法的余数,例如,如果模为3,则为2,然后我将除法的整数部分进行除法并提取出来,这样我就可以将余数添加到最后一个除法的数字中,在这种情况下为166
<?php
$numbertodivise = 500;
$no = 3;
$intnumber = intval($numbertodivise / $no);
$rem = $numbertodivise % $no;
$array = [];
for($i=1;$i<=$no;$i++) {
if($i==$no) {
$array[] = $intnumber + $rem;
} else {
$array[] = $intnumber;
}
}
echo "<pre>";
print_r($array);
?>
要制作您提到的变量,请使用:
function get_results($val, $qt){
$division = intdiv($val, $qt); // PHP <7: $division = ($val - ($val % $qt)) / $qt;
$ret = array_fill(0, $qt, $division); // fill array with $qt equal values
if($division != $val / $qt){ // if not whole division, add remaning to lsat element
$ret[count($ret)-1] = $ret[0] + ($val % $qt);
}return $ret;
}
对于PHP7,您可以使用这个函数check comment For这是一种使用intval和模运算符%的方法:
一种不循环并使用基本PHP函数的方法 我使用array_fill将数组填充为计算的底部。 然后将剩余部分添加到数组中的最后一项
说什么?你能用另一种方式解释吗?看一看。对于最后一部分,你可以添加模。一个好的答案总是会解释做了什么以及为什么这样做,不仅是为了OP,而且是为了将来的访问者。@JayBlanchard解释添加了或不添加,没有尝试。一个好的答案总会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,也是为了未来的SO访客。好的,谢谢你的提示,我想如果你喜欢的话试试,而不是像我不知道自己在做什么那样去尝试。我编辑了我的答案以便更具可读性。谢谢。这仍然不能解释你的方法或者你改变了什么。好的。希望你的下一个选民会回来取消他们的投票。这会很好,但不是必须的。希望如此:谢谢你的建议。
<?php list($result1, $result2, $result3) = $array; ?>
function get_results($val, $qt){
$division = intdiv($val, $qt); // PHP <7: $division = ($val - ($val % $qt)) / $qt;
$ret = array_fill(0, $qt, $division); // fill array with $qt equal values
if($division != $val / $qt){ // if not whole division, add remaning to lsat element
$ret[count($ret)-1] = $ret[0] + ($val % $qt);
}return $ret;
}
print_r(get_results(500, 3));
Array
(
[0] => 166
[1] => 166
[2] => 168
)
<?php
$divide = 500;
$divideWith = 3;
for($i=0; $i < $divideWith; $i++)
{
echo "This is result".($i+1).": ";
// If $i is not on the last iteration
if($i != $divideWith-1)
// intval() returns integer part without rounding. It
// floors the value inside the parenthesese.
echo intval($divide/$divideWith).'<br/>';
else
// ($divide % $divideWidth) will return the remainder of
// division between $divide and $divideWidth.
// The remainder is always an int value.
echo (int($divide/$divideWith) + ($divide % $divideWith)).'<br/>';
}
?>
This is result1: 166
This is result2: 166
This is result3: 168
$number = 500;
$divise =3;
$arr = array_fill(0, $divise, floor($number/$divise));
$arr[count($arr)-1] += $number-(floor($number/$divise)*$divise);
// Above line can also be . $arr[count($arr)-1] += $number-$arr[0]*$divise;
Var_dump($arr);