2011-02-03 188 views
0

我確定我在做這件事的順序是錯誤的。我有以下的計算:折扣計算不正確

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

我乘上稅100再加上價格和數量,然後最後由小數折扣金額乘以分爲價格和數量。當我用計算器做這件事時,我得到了正確的折扣,但是用SQL,我得到了幾美元。

+1

你爲什麼用MySQL做數學?將其留給常規代碼。 – 2011-02-03 16:53:46

回答

0

我認爲它與運算符優先級有關。試試這個:從MySQL文檔網站

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

摘錄:

的運算符一起顯示在 線具有相同的優先級。 INTERVAL BINARY,COLLATE!
- (一元減)〜(一元位反轉)^
*,/,DIV,%,MOD
- ,+ < <,>> & |
=(比較),< =>,> =,>,< =,<,<>,!=,IS,LIKE,REGEXP之間,
情況下,當,THEN,ELSE NOT & &,AND XOR
||,OR
=(賦值),:=

有關運算符優先檢查的更多信息:

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

+0

感謝Cyber​​mate。我現在就給一個鏡頭。 – jim 2011-02-03 16:58:14

0

您是否給予總價((價格*數量)+((價格*數量)+稅費/ 100))的折扣或只是在沒有稅收的價格上?

如果您提供的價格*數量的優惠,那麼它是好的,否則支架必須dicount

((p之前。price * opquantity)*((ptax_state + ptax_fed)/ 100)+(pprice * op.))* opdiscount as totaldisc,