折扣计算不正确

时间:2011-02-03 16:50:27

标签: mysql

我确定我这样做的顺序是错误的。我有以下计算:

(`p`.`price`*`op`.`quantity`) * ((`p`.`tax_state`+`p`.`tax_fed`)/100) + (`p`.`price`*`op`.`quantity`) * `op`.`discount` as totaldisc,

我将价格和数量乘以税除以100加上价格和数量,然后乘以小数折扣金额。当我使用计算器执行此操作时,我得到了正确的折扣,但使用SQL,我只需花几美元。

2 个答案:

答案 0 :(得分:0)

我认为它的运算符优先级问题。试试这个:

 (
     (`p`.`price`*`op`.`quantity`) * 
     ((`p`.`tax_state`+`p`.`tax_fed`)/100) + 
     (`p`.`price`*`op`.`quantity`)
 ) * `op`.`discount` as totaldisc,

摘自MySQL文档网站:

  

一起显示的运算符   一行具有相同的优先权。   INTERVAL BINARY,COLLATE!
   - (一元减号),〜(一元位反转)^
  *,/,DIV,%,MOD
   - ,+<<,>> &安培; |
  =(比较),< =>,> =,>,< =,<,<>,!=,IS,LIKE,REGEXP,IN BETWEEN,
  情况,时间,然后,不是和&&,和XOR
  ||,或
  =(赋值),:=

有关运算符优先级检查的更多信息:

  

http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html

答案 1 :(得分:0)

您是否给予总价((价格*数量)+((价格*数量)+税/ 100))或仅含税价格的折扣?

如果您提供价格*数量的折扣,那么它是好的,否则括号必须放在dicount

之前

((pprice * opquantity)*((ptax_state + ptax_fed)/ 100)+(pprice * opquantity))* opdiscount as totaldisc ,