Сначала приведение значения к десятичному типу, а затем вызов Math.Round вернет «правильное» значение.

имаю принцип, лежащий в основе этой проблемы, но у меня возникает головная боль, когда я думаю, что это происходит во всем приложении, и мне нужно найти решение.

double Value = 141.1;
double Discount = 25.0;
double disc = Value * Discount / 100; // disc = 35.275
Value -= disc; // Value = 105.824999999999999

Value = Functions.Round(Value, 2); // Value = 105.82

Я использую двойные числа для представления довольно маленьких чисел. Каким-то образом в расчете 141.1 - 35.275 двоичное представление результата дает число, которое составляет всего лишь 0,0000000000001. К сожалению, так как я тогда округляю это число, это дает неправильный ответ.

Я читал об использовании десятичных чисел вместо двойных, но я не могу заменить каждый экземпляр двойного числа десятичным. Есть ли более простой способ обойти это?

Ответы на вопрос(4)

Ваш ответ на вопрос