Было бы очень полезно узнать, где вы получили исходную формулу, и что вы ожидаете от каждой части. На самом деле я был вынужден проделать дополнительную работу, чтобы понять, как константы в вашей формуле соотносятся с затратами, указанными в вашем примере.
Ваши расходы на обработку рассчитываются по формуле:
0.35 + (subtotal - discount) * 0.034
Я не знаю, почему существует 0,35.
Ваша скидка рассчитывается по формуле:
subtotal * discount rate, (where discount rate has already been converted to a decimal)
Общая сумма рассчитывается по формуле:
subtotal + handling costs - discount
После написания этого и некоторых размышлений я собираюсь догадаться, что вы хотите сделать обратный расчет для определения промежуточного итога, когда известны только ставки и промежуточный итог. Давайте начнем с того, что мы знаем, а затем изменим формулу по мере необходимости.
subtotal = total + discount - handling costs
subtotal = total + subtotal * discount rate - (0.35 + (subtotal - discount) * 0.034)
subtotal (1 - discount rate) = total - (0.35 + subtotal - subtotal * discount rate) * 0.034
subtotal (1 - discount rate) = total - 0.35 - subtotal (1 - discount rate) * 0.034
subtotal (1 - discount rate) + subtotal (1 - discount rate) * 0.034 = total - 0.35
subtotal (1 - discount rate) (1 + 0.034) = total - 0.35
subtotal (1 - discount rate) * 1.034) = total - 0.35
subtotal = (total - 0.35) / ((1 - discount rate) * (1.034))
Итак, хорошая новость в том, что я придумал то же математическое уравнение, что и вы, и теперь по большей части понимаю, как вы к нему пришли. Плохая новость заключается в том, что при пробивании чисел для случая №2 все еще остается одна сотая.
Эта небольшая ошибка связана с тем, что мы имеем дело с округленными числами. Когда стоимость обработки и скидка первоначально рассчитываются, они округляются до ближайшей сотой. Это можно рассматривать как ошибку округления. Когда они складываются вместе, ошибка округления становится больше. Это нормальный побочный продукт при работе с процентами и ценами.
Когда обратное вычисление выполнено, начальное число (общее) содержит ошибку округления, и можно ожидать, что окончательное число (промежуточный итог) будет близко к ожидаемому значению, но не гарантируется, что оно будет исходным промежуточным итогом. Опять же, это связано с ошибками округления и присущей неточности в том, как сначала был рассчитан итог.
Моя собственная математика недостаточно хороша, чтобы предсказывать и исправлять ошибки округления в формуле. Тем не менее, у меня есть предложение, как это обнаружить и исправить после факта. После вычисления обратного промежуточного итога это число можно использовать для прямого расчета. Если элементы не складываются, как они должны, примените «фактор выдумки» и попробуйте снова. Повторите по мере необходимости. Это грязно и не особенно элегантно, но должно работать.
Надеюсь, это поможет.