Почему моя функция не работает - PullRequest
0 голосов
/ 14 марта 2012

Работа над назначением класса и когда я запускаю этот код

function paycheck1($hours,$payrate,$othours,$otrate){
        if ($hours > $othours){
            $total = "<tr><td>".($hours*$payrate)+($hours - $othours)*$otrate."</td></tr>";
        return $total;  
        }
        else{
            $total = "<tr><td>".$hours * $payrate."</td></tr>";
            return $total;
        }
}

$pay = 10;
$hours = 50;
$overtime_starts = 40;
$overtime_rate = 15; 
echo "<table>";
for ($i=0;$i<$hours;$i++){
echo paycheck1($i, $pay, $overtime_starts, $overtime_rate);
}
echo "</table>";

Я получаю вывод, как это

153045607590105120135
0
10
20
30
40.....

Почему я получаю 153045607590105120135 Когда я запускаю код. Если я удаляю ($hours*$payrate)+ из функции ->, если , это работает просто отлично. Почему я получаю то, что использую, это ошибка переполнения.

Ответы [ 5 ]

1 голос
/ 14 марта 2012

Мне кажется, что попытка вычислить числовую сумму, а также конкатенация вашей строки "$ total" вызывает проблему. Либо поставьте круглые скобки вокруг всего вычисления, либо отделите вычисление от строкового вывода следующим образом:

function paycheck1($hours, $payrate, $othours, $otrate){
        if ($hours > $othours){
            $numeric_total = ($hours*$payrate)+($hours - $othours)*$otrate; // calc total
            $total = "<tr><td>".$numeric_total."</td></tr>";
            return $total;  
        }
        else{
            $total = "<tr><td>".$hours * $payrate."</td></tr>";
            return $total;
        }
}
1 голос
/ 14 марта 2012

Легче найти проблему в источнике, если вы поместите символы новой строки в конце HTML, например:

$total = "<tr><td>".($hours * $payrate)."</td></tr>\n";

Также вы должны обращать внимание на порядок операций, даже с оператором ..

Эта строка:

$total = "<tr><td>".($hours*$payrate)+($hours - $othours)*$otrate."</td></tr>\n";

Требуется скобка:

$total = "<tr><td>".(($hours*$payrate)+($hours - $othours)*$otrate)."</td></tr>\n";
1 голос
/ 14 марта 2012

Обернуть все математические уравнения с помощью () при использовании строк.

Измените строку 4 на следующую:

$total = "<tr><td>".(($hours*$payrate)+($hours - $othours)*$otrate)."</td></tr>";
0 голосов
/ 14 марта 2012

По моему мнению, круглые скобки вокруг математических вычислений решат эту проблему.

Я бы предложил изменить функцию, чтобы она возвращала только значение, вычисленное с помощью выражения, а не возвращала содержимое HTML для большей простоты.

    function paycheck1($hours,$payrate,$othours,$otrate){
    if ($hours > $othours){
        $total = ($hours*$payrate)+($hours - $othours)*$otrate;
    return $total;  
    }
    else{
        $total = $hours * $payrate;
        return $total;
    }
    }
    $pay = 10;
    $hours = 50;
    $overtime_starts = 40;
    $overtime_rate = 15; 
    echo "<table>";
    for ($i=0;$i<$hours;$i++){
    echo "<tr><td>".paycheck1($i, $pay, $overtime_starts, $overtime_rate)."</td></tr>";
    }
    echo "</table>";
0 голосов
/ 14 марта 2012

Это просто ошибка дисплея, вызванная неверной разметкой.

Заменить

$total = "<tr><td>".($hours*$payrate)+($hours - $othours)*$otrate."</td></tr>";

с

$total = "<tr><td>".(($hours*$payrate)+($hours - $othours)*$otrate)."</td></tr>";

для предотвращения путаницы в строке.

...