2016-08-18 63 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