2014-02-20 49 views
0

我在計算PHP時遇到了一些問題。輸出回顯有錯誤的值。例如與3500的回聲,應該是475.相反,我得到一個525?我哪裏出錯了?計算後錯誤的輸出PHP

我正在嘗試創建一個系統來計算服務費用。費用將自動產生總和。對於2500歐元的第一部分,服務費將爲15%。對於第二部分(介於2500和5000之間),費用將爲10%等。我寫了下面的代碼,但是我的輸出(回顯)不正確。沒有exit;它只是保持循環。我的代碼有什麼問題?有沒有人有一個建議。我是一個PHP新手BTW,所以任何幫助將不勝感激!

<? 

### Sum ### 
$som = 3500; // example sum 3500 (2500 first part 15%/1000 second part 10%) 

/* Output should be with 3500 : 
15% of 2500 = 375 + 10% of 1000 = 100 (part above 2500) TOTAL of 475. 
My output is 525??? :s */ 


### 15% first 2500 ### 
if ($som < 2500); { 
$uitkomst = $som/100 * 15; 
echo $uitkomst; 
exit; } 

### 10% between 2500 - 5000 ### 
if ($som >2500 && $som < 5000); { 
$iv1 = 2500/100 * 15; 
$ts = $som - 2500; 
$iv2 = $ts/100 * 10; 
$iv1 + $iv2 = $uitkomst; 
echo $uitkomst; 
exit; } 

### 5% between 5000 - 10.000 ### 
if ($som >5000 && $som <10000); { 
$iv1 = 2500/100 * 15; 
$iv2 = 2500/100 * 10; 
$ts = $som - 5000; 
$iv3 = $ts/100 * 5; 
$iv1 + $iv2 + $iv3 = $uitkomst; 
echo $uitkomst; 
exit; } 

### 1% between 10.000 and 200.000 ### 
if ($som >10000 && $som <200000); { 
$iv1 = 2500/100 * 15; 
$iv2 = 2500/100 * 10; 
$iv3 = 5000/100 * 5; 
$ts = $som - 10000; 
$iv4 = $ts/100 * 1; 
$iv1 + $iv2 + $iv3 + $iv4 = $uitkomst; 
echo $uitkomst; 
exit; } 

### 0.5% over 200.000 ### 
if ($som >200000); {  
$iv1 = 2500/100 * 15; 
$iv2 = 2500/100 * 10; 
$iv3 = 5000/100 * 5; 
$iv4 = 190000/100 * 1; 
$ts = $som - 200000; 
$iv5 = $ts/100 * 0.5; 
$iv1 + $iv2 + $iv3 + $iv4 + $iv5 = $uitkomst; 
echo $uitkomst; 
exit; } 
?> 
+0

你說你的腳本在沒有退出的情況下會一直運行嗎?你可以發佈你的循環結構嗎? – Kyle

+3

你的$ uitkomst分配是倒退的。左操作數被設置爲右側表達式的值。 – lwitzel

+0

這看起來很可怕,很難維護,你應該有一個關聯數組將百分比連接起來,並使用「while」循環,減去數量直到達到「0」。現在你正在重複自己很多事情,改變一個百分比或金額將需要大量的代碼更改。 – jeroen

回答

1

你的代碼有一些問題。

首先,你有不變量賦值條件語句,但變量是本地的條件,因此,如果條件不爲真,那麼變量從未被分配供以後使用

$uitkomst = 0; //you need to add this. 
if ($som < 2500); { 
$uitkomst = $som/100 * 15; 

下一個問題是,你的變量賦值是倒退,PHP是左到右,而不是從右到左,在下面的語句你的$uitkomst的值賦給$iv2$iv2

$iv1 + $iv2 = $uitkomst; 

這就需要將:

$uitkomst = $iv1 + $iv2; 

,並需要在你的代碼的幾個地方進行的調整。

最後,你有;的跟蹤條件陳述後。雖然我什至不知道如何在功能全,這些需要被刪除:

if ($som >10000 && $som <200000); { 

需要改爲:

if ($som >10000 && $som <200000){ 

,並需要在幾個地方進行的調整你的代碼。

+0

感謝您的解答,您的解決方案解決了問題 – user3334594

0
$iv1 + $iv2 = $uitkomst; 

問題在這裏,它是:$ uitkomst = $ iv1 + $ iv2;因爲在php和其他語言中,賦值是:$ var = val;而不是相反......我建議你使用ELSEIF做的迴響,ELSEIF後,做退出後...

+0

感謝您的評論。這將幫助我提高我的PHP技能。 – user3334594

1

你的if語句是空的:

if ($som >2500 && $som < 5000); 

輸';'

也習慣於將括號括起來,

if(($som >10000) && ($som <200000)) 
+0

謝謝,下次我會記住這一點。我剛剛開始使用PHP,所以我很樂意提供幫助。 – user3334594

1

以下是對您更好的方法。根據需要添加儘可能多的規則。

<?php 

### Sum ### 
$som = 3500; // example sum 3500 (2500 first part 15%/1000 second part 10%) 

$rules = array(
    // lower bound => array( 
    // 'percent' => percent to charge for this rule, 
    // 'upper' => upper bound for this rule 
    //) 
    0 => array('percent' => 0.15, 'upper' => 2500), 
    2500 => array('percent' => 0.10, 'upper' => 5000), 
    5000 => array('percent' => 0.05, 'upper' => 10000), 
    10000 => array('percent' => 0.01, 'upper' => 200000), 
    200000 => array('percent' => 0.005, 'upper' => null), 
); 

$fee = 0; 
$toCalculate = $som; 
foreach($rules as $lower => $rule) { 
    // If there's nothing left to calculate, break 
    if($toCalculate <= 0) break; 

    $rule['upper'] = $rule['upper'] ? $rule['upper'] : $toCalculate; 

    // Amount to apply the current fee percent to 
    $current = min($rule['upper'], $toCalculate); 

    // Add fee generated by current rule 
    $fee += $rule['percent'] * $current; 
    $toCalculate -= $current; 
} 

echo 'Fee: ' . $fee; 
+0

幹得好。打敗我吧。我寫了一個小數 - >羅馬數字轉換器,工作非常相似。 – Kyle

+2

感謝您的解決方案。這很好,並保持代碼清潔。我會研究你的代碼,以提高我的PHP技能 – user3334594