2011-02-05 104 views
0

该公式中的优先顺序不正确。计算不正确

我想要做的是计算小计没有折扣。有人能告诉我我犯了什么错误吗?

((`p`.`tax_state` + `p`.`tax_fed`)/100) * 
    ((`p`.`price` * `op`.`quantity`) - 
     ((`p`.`price` * `op`.`quantity`) * `op`.`discount`)) 
+0

如果您想计算无税小计,为什么您的公式包含单词“tax_state”和“tax_fed”? – jmort253

+0

我想包括税和折扣,然后退出,以确保我有正确的总数。 – Jim

+0

“折扣”是否存储在一个数字('25')?或一小部分('.75')。 –

回答

0

鉴于税率存储为百分比,但是折扣被存储为一个分数(这么多的一致性!),并指出反引号真的是没有必要的,并且是可读性非常不可取的,然后......

(p.price * op.quantity) AS gross_price_exc_tax, 
(p.price * op.quantity) * (1 + (p.tax_state + p.tax_fed)/100) 
         AS gross_price_inc_tax, 
(p.price * op.quantity) * (1 + (p.tax_state + p.tax_fed)/100) * 
     (1 - op.discount) AS net_price_inc_tax, 
... 

这些都是非常相似你写什么,所以你需要证明你有什么作为输入数据,和你做了什么为结果,你应该能够说明你的预期是什么作为你得到的对比。当你期望它是一个浮点数值时,是否有任何危险,MySQL会将整个表达式的一部分视为一个整数?

你也应该像我一样做,一次一个地构建你的表达集,每次分析结果。这可以帮助您更快地发现问题。例如,我可以添加:

(1 + (p.tax_state + p.tax_fed)/100) AS tax_multiplier 

如果出现了为1,而不是1.125或任何正确的分数,那么我知道该审查的表达,可能增加小数点两个常量。