我想计算一个费率值,但我没有得到正确的结果。
除费率值
外,一切正常任何人都可以帮我找到我的代码的问题。
这是我的疑问:
$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 :(得分: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"]
所以你必须在括号中加上括号:
$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