Система целочисленного деления выдаёт php - PullRequest
0 голосов
/ 05 августа 2020

У меня проблема с скриптом деления целых чисел. Я хочу, чтобы мы разделили 8 на 3 части. Все цифры должны быть округлены. например, 3,3,2 Если мы просуммируем эти 3., получится 8.

Но следующий скрипт делит с некоторой разницей. Делит 2,2,4. Это тоже 8. Но мне нравится выше 1. Может ли кто-нибудь помочь в этом случае, пожалуйста. Вот код.

$numbertodivise = 8;
$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;
    }
}

print_r($array);

его выход

Array ( [0] => 2 [1] => 2 [2] => 4 )

Пожалуйста, помогите мне сделать это так

Array ( [0] => 3 [1] => 3 [2] => 2 )

8 не является фиксированным целым числом . Это будет динамически c .. 8,9,19,22, 88, 9888, любое di git это может быть.

Ответы [ 3 ]

1 голос
/ 05 августа 2020

Изменить изменил $turn на $no для l oop. Вы можете использовать это для любого номера.

<?php
    $numbertodivide = 8;
    $no = 3;
    $array = [];
    $added=0;//initialize the variable to track added number to make the given number divisible
    while($numbertodivide%$no){
        $numbertodivide+=1;
        $added++;
    }
    $turn=$numbertodivide/$no;//get how many times we have to repeat the divider to get the given number
    for($i=0;$i<$no-1;$i++){
        $array[]=$turn;
    }
    $array[]=$turn-$added;//trim the added number from the last input of the number.
?>
0 голосов
/ 06 августа 2020

Без петель. Используя ваши переменные:

$count = ceil($numbertodivise / $no);
$rem = $numbertodivise - ($no * ($count-1));
$array = array_fill(0,$count-1,$no);
$array[] = $rem;

Результат:

Array
(
    [0] => 3
    [1] => 3
    [2] => 2
)
0 голосов
/ 05 августа 2020

intval() округляется в меньшую сторону. Вы хотите округлить, поэтому используйте ceil().

$intnumber = ceil($numbertodivise / $no);
$rem = $numbertodivise % $intnumber;

$array = array_fill(0, $no, $intnumber);
if ($rem != 0) {
    $array[count($array)-1] = $rem;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...