2012-03-14 118 views
0

在課堂作業工作,當我運行這段代碼爲什麼我的功能故障

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)+函數 - >如果它工作得很好。爲什麼我得到我使用的是溢出錯誤。

+1

這有幫助嗎? '$ total =「​​」。($ hours * $ payrate)。「」;' – Shomz 2012-03-14 06:34:23

回答

1

它更容易找到問題的根源,如果你把換行符在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"; 
0

這只是由您的無效標記導致的顯示故障。

更換

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

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

防止串被搞砸了。

1

包裝所有的數學方程()使用字符串時。

更改4號線以下:

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

它看起來對我來說,試圖計算數字總同時串接你的「總$」字符串造成問題。要麼把括號圍繞整個計算或計算從字符串輸出這樣的分離:

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; 
     } 
} 
0

據我圓括號周圍的數學計算會解決這個問題。

我建議修改該函數以僅返回使用表達式計算的值,而不是返回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>";