Я считаю, что ваша самая значительная ошибка в том, что вы держите
decimal baseinsuranceprice = 50.5m;
как поле вашего Mainform класса. Вот почему вы получаете новый результат каждый раз, когда нажимаете кнопку с теми же параметрами (после первого расчета baseinsuranceprice больше не 50,5 м).
Самое простое решение - это «сброс»это значение к исходному 50,5 м по одному перед каждым расчетом.
Мое предложение состоит в том, чтобы реализовать ваш алгоритм расчета цены в виде чистой функции (может быть, вы даже хотите иметь егокак отдельный класс, и, возможно, вы захотите написать для него несколько тестов), поэтому вы даете только начальные параметры своей функции / классу, и он вычисляет вам результат.
Таким образом, у вас не будетлюбая зависимость от состояния вашей формы. Более того, если вам нужно сохранить базовую страховую цену в вашей системе, лучше, чтобы она была постоянной или даже считываемой из конфигурации.
На мой взгляд, нет ничего плохого в пересчете. значение, если этот расчет не занимает слишком много времени. В вашем случае это нормально для запуска расчета при каждом клике.