2011-02-05 2 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 или любой правильный дробь, то я знаю, чтобы рассмотреть это выражение, вероятно, добавление десятичной точки к двум параметрам.

Смежные вопросы