У нас есть проблема с округлением чисел с плавающей запятой для некоторых финансовых расчетов.
По сути, мы хотим округлить денежные суммы, например 1000000000,555, до 2 десятичных знаков. Однако числовое представление этого числа с плавающей запятой равно 1000000000,5549999, и в результате мы округлим до 1000000000,55, а не до 1000000000,56.
Есть ли способ решить эту проблему безопасным способом? Единственное, что мы до сих пор придумали, - это всегда добавлять наименьшее представимое число с плавающей запятой к сумме перед операцией округления, но мы не знаем, безопасно ли это во всех случаях.
Код написан на C и должен запускаться в windows32 / 64 / linux / solaris, поэтому у нас, к сожалению, нет доступа к таким приятным вещам, как тип данных Decimal в .net.
Любой вклад был бы полезен.
Спасибо, Рикард