错误不是正确的计算结果PHP

时间:2016-08-18 09:37:13

标签: 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

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

这是基本的数学错误。详情见operators precedence

  

乘法优先于(意味着发生在之前)和。

你有 3个乘法/除法表达式的总和

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

虽然您想先计算总和,然后按100 /$a["checkproduct"]

对其进行mupltiply

所以你必须在括号中加上括号:

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

答案 1 :(得分:1)

您缺少一些括号()来解释Operator Precedence。这是基本的数学,与编码&#39;无关。

$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

请注意额外的括号

答案 2 :(得分: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