2016-08-18 53 views
0

我想計算一個費率值,我沒有正確的結果。錯誤不正確的計算結果PHP

一切正常,除了速度值

任何人可以幫助我找到我的代碼的問題。

這是我的查詢:

$sql = " 

     SELECT 

     check_code.codegroup, 
     check.check_1, 
     check.check_2, 
     check.check_3, 
     COUNT(DISTINCT CASE WHEN status = 1 THEN check_product.product ELSE 0 END) as checkproduct 

     FROM check_code.code_group 

     LEFT JOIN check_product ON check_product.codegroup = check_code.codegroup 
     LEFT JOIN check ON check_product.codegroup = check.code_group 

     GROUP BY check_code.id_code_group 
     ORDER BY check_code.id_code_group DESC 

     "; 

     <td>codegroup</td> 
     <td>checkproduct</td> 
     <td>check_1</td> 
     <td>check_2</td> 
     <td>check_3</td> 
     <td>Rate</td> 

     <?php 

      foreach ($data as $query => $a) : 

      //to calcule rate 
      $rate = ($a["check_1"] * 0.15) + ($a["check_2"] * 0.35) + ($a["check_3"] * 0.5) * 100 /$a["checkproduct"]; 


     <td><? echo $a["codegroup"];?></td> 

     <td><? if($a["checkproduct"]==1){}else{echo $a["checkproduct"];}?></td> 

        <td><? echo $a["check_1"];?></td> 
        <td><? echo $a["check_2"];?></td> 
        <td><? echo $a["check_3"];?></td> 
        <td><? echo $rate;?></td> 

例子:

This what my code return : 

    codegroup |checkproduct|check_1|check_2|check_3|rate 
    AL16bof05  94  1  1  1  1.031914893617 

這就是我想要返回:

codegroup| checkproduct|check_1|check_2|check_3|rate 
    AL16bof05  94  1  1  1  1.06338297 

感謝您的幫助。

+0

什麼是 '假結果'?請給一些更多的信息.​​.. – Cagy79

+0

我有一個虛假的結果與我的利率價值。 – zouzou

+0

你知道'false'在程序語言中有非常具體的含義,與布爾值有關 –

回答

2

這是基本的數學錯誤。詳細其約operators precedence

乘法的優先級高於(這意味着之前發生)之和。

你有一筆3乘法/除法表達式

$rate = ($a["check_1"] * 0.15) 
     + ($a["check_2"] * 0.35) 
     + ($a["check_3"] * 0.5) * 100 /$a["checkproduct"]; 

當你想先mupltiply它由100 /$a["checkproduct"]

所以,你必須calulate總和把周圍和支架:

$rate = (($a["check_1"] * 0.15) + ($a["check_2"] * 0.35) + ($a["check_3"] * 0.5)) 
     * 100 /$a["checkproduct"]; 
+0

感謝您的回答。有用。 – zouzou

0

您錯過了括號,所以操作的順序是錯誤的,給你錯誤的結果

$rate = ($a["check_1"] * 0.15) + ($a["check_2"] * 0.35) + ($a["check_3"] * 0.5)) * 100 /$a["checkproduct"]; 
                      ^

這將基本上做一個1 * 100/94,這意味着1,063829787234043

+0

感謝您的回答。 – zouzou

1

你缺少一些括號()到correclty interprete的Operator Precedence。這是基礎數學,與'編碼'無關。

$rate = ($a["check_1"] * 0.15) + ($a["check_2"] * 0.35) + ($a["check_3"] * 0.5) * 100 /$a["checkproduct"]; 

這將產生1,031914894

應該改爲:

$rate = (($a["check_1"] * 0.15) + ($a["check_2"] * 0.35) + ($a["check_3"] * 0.5)) * 100 /$a["checkproduct"]; 

這將產生1,063829787

請注意額外的支架

+1

非常感謝您的回答。 – zouzou