Это "абсолютно нормальное" поведение. Для справки -
https://bit.ly/2B5HY9j - это иногда и к жертвам приводит :)
з.ы.
Если у вас просто умножение - попробуйте подойти с другой стороны:
мы же знаем , что если у первого множителя было 2 знака после запятой, а у второго 5, то у результата умножения будет 7 знаков после запятой (по крайней мере имеющих значение). Т.е.
NumberOfDecimalSigns(multiplier1) + NumberOfDecimalSigns(multiplier2) = NumberOfDecimalSigns(result);
А потом просто округлять ваши значение до получившегося выше количества знаков после запятой