计算不正确

时间:2011-02-05 04:45:47

标签: mysql

此公式中的优先顺序不正确。

我想要做的是计算没有折扣的小计。有人能告诉我我在哪里弄错了吗?

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

1 个答案:

答案 0 :(得分: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,或者无论正确的分数是什么,那么我就知道要检查那个表达式,可能会在两个常量上加上小数点。