Если я напечатаю свою переменную, я получу четыре раза 1 вместо числа 4 - PullRequest
0 голосов
/ 22 февраля 2019

Мне нужно разделить два числа и получить остаток.Но когда я пытаюсь распечатать остаток с помощью цикла for, он возвращает общее количество раз 1 числа, например, так: когда вычисление равно 19/5, остаток равен 4, но возвращается 1111

Это моя форма:

<form method="post">
    <input type="text" name="n1"><br>
    <input type="text" name="n2"><br>
    <input type="submit" name="btnClick" value="click">
</form>

А это мой PHP:

if (isset($_POST['btnClick'])) {

    $number1 = $_POST['n1'];
    $number2 = $_POST['n2'];

    if (!is_numeric($number1) || !is_numeric($number2) || strpos($number1, ".") || strpos($number2, "."))
    {
        echo "error";
    }

    elseif ($number1 <= 0 && $number2 <= 0 || $number1 < 0 || $number2 <= 0) {
        echo "error";
    }


    elseif(!$number1 <= 0 && !$number2 <= 0 || !$number1 < 0 || !$number2 <= 0){

    $answer = $number1 / $number2;

    $RoundedAnswer = round($answer);

    if ($RoundedAnswer * $number2 > $number1) {
        $Result = $RoundedAnswer - 1;

        $ResultRemaind = $Result * $number2;

        for ($i=$ResultRemaind; $i < $number1; $i++) { 
            echo count($i);
        }
    }
    else{
        $Result = $RoundedAnswer;
    }
}

}

Ответы [ 6 ]

0 голосов
/ 07 марта 2019

если вам нужны только различия в числах, вы можете выполнить следующие действия:

$a = 15;
$b = 19;
echo abs($a - $b); 

вывод 4.

ИЛИ

$a = (any value);
$b = (any value);
if( $a > $b ){
    echo abs($a - $b);
} else {
    echo $b - $a;
}

ИЛИ

$a = (any value);
$b = (any value);
$counter = 0;
if( $a > $b ){
    for ($i=$a; $i < $b; $i++) { 
        $counter++;
    }
} else{
    for ($i=$b; $i < $a; $i++){
        $counter++;
    }
}
echo $counter; 
0 голосов
/ 22 февраля 2019

Я бы сделал это так ...

<?php

$_POST['btnClick'] = TRUE;

$_POST['n1'] = '19';

$_POST['n2'] = '5';


if ( isset ( $_POST['btnClick'] ) )
{
    if ( ( ! empty ( $_POST['n1'] ) && ! empty ( $_POST['n2'] ) && ctype_digit ( $_POST['n1'] ) && ctype_digit ( $_POST['n2'] ) ) )
    {
        $total = round ( ( $_POST['n1'] / $_POST['n2'] ) );

        if ( ( $total * $_POST['n2'] ) > $_POST['n1'] )
        {
            echo ( $_POST['n1'] - ( ( $total - 1 ) * $_POST['n2'] ) );
        }
        else
        {
            echo $total;
        }
    }
    else
    {
        echo "Error, inputs must be type integer!";

    }
}
else
{
    echo "Error, no button click!";
}

?>
0 голосов
/ 22 февраля 2019
echo (19 % 5)
// outputs 4

или более общая версия, которая также обеспечивает использование целых чисел.Также используется абсолютное значение, поскольку результат % может быть отрицательным в PHP.

$remainder = (int) $num1 % (int) $num2;
$remainder = abs($remainder); // convert this to a positive number, regardless of sign.

% - это оператор modulo, который дает остаток от деления двух целых чисел.

Причина, по которой вы отображаете четыре раза 1:

$ResultRemaind = $Result * $number2;
for ($i=$ResultRemaind; $i < $number1; $i++) { 
    echo count($i);
}

count() дает вам количество элементов в переменной.$i это просто число, т. Е. $ I содержит ровно один элемент.Поэтому count($i) всегда возвращает 1.

. Вы используете echo в своем цикле, что означает, что вы печатаете что-то (в данном случае 1) столько раз, сколько выполняется цикл.Вы можете сделать что-то вроде $ counter ++ в цикле, а затем echo $counter ПОСЛЕ выполнения цикла.

0 голосов
/ 22 февраля 2019

Почему цикл, а не просто ....

<?php

$nU = 15;

$nG1 = 19;

echo $nG1 - $nU;

?>
0 голосов
/ 22 февраля 2019

Попробуйте ИЛИ Удалить функцию отсчета, просто повторить переменную $ i

$nU = 15;
$nG1 = 19;
for ($i=$nU; $i < $nG1; $i++) { 

   echo $i;
   echo "<br>";
 }
0 голосов
/ 22 февраля 2019

Вам нужно создать счетчик для этого.проверьте код ниже:

$nU = 15;
$nG1 = 19;
$counter = 0;
for ($i=$nU; $i < $nG1; $i++) { 
    $counter++;
}
echo $counter; // showing 4 as you want. Counting for 15 , 16, 17 and 18

Или вы можете использовать функцию php abs для вычитания двух значений, как показано ниже:

$nU = 15;
$nG1 = 19;
echo abs($nG1 - $nU); // 4

Надеюсь, это поможет вам.

...