У меня есть требование использовать устаревший код на языке в стиле XBase (в данном случае FoxPro) и преобразовать его в C#.NET. Я хочу получить идентичный результат при перезаписи, но расхождения в округлении сводят меня с ума. Я попробовал Decimal.Round(MidpointRounding) в одиночку, но обнаружил, что мне также нужно написать свою собственную функцию "округления" для ситуаций, когда средняя точка = 5.
Это было бы хорошо, если бы это работало, но я вижу, что мой метод «сводки» необходим для согласования с выводом FoxPro в некоторых случаях, но на самом деле создает расхождения в других. Запрос к базе данных выполняет некоторое умножение и деление, и мне интересно, накапливаются ли математические расхождения между двумя системами.
Вот пример того, что мне кажется несоответствием. Начальное значение каждой пары исходит из вывода моего запроса LINQ. Учитывая это, я хочу сгенерировать округленный результат, идентичный показанному результату FoxPro:
.NET LINQ Query result: 7.0477049103806673503597572093.
FoxPro rounding: 7.0
.NET LINQ: 7.2499596595318807183725770943.
FoxPro rounding: 7.3
Любые предложения относительно того, как я могу точно продублировать значение из устаревшей системы, не прибегая к совершенно бестолковому взлому?