2011-02-05 158 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或任何正確的分數,那麼我知道該審查的表達,可能增加小數點兩個常量。