0

我需要使用XBase 风格的语言(在本例中为 FoxPro)获取遗留代码并将其转换为 C#.NET。我想从我的重写中得到相同的输出,但是四舍五入的差异让我抓狂。我单独尝试了Decimal.Round(MidpointRounding)的东西,但发现我还需要为 midpoint = 5 的情况编写自己的“向上取整”函数。

如果它有效,那很好,但我看到的是,在某些情况下需要我的“汇总”方法才能与 FoxPro 输出一致,但实际上会在其他情况下产生差异。数据库查询正在做一些乘法和除法,我想知道两个系统之间的数学差异是否正在累积。

这是一个在我看来不一致的例子。每对的初始值来自我的 LINQ 查询的输出。鉴于这些,我想生成一个与所示 FoxPro 结果相同的舍入结果:

.NET LINQ Query result: 7.0477049103806673503597572093.
FoxPro rounding: 7.0

.NET LINQ: 7.2499596595318807183725770943.
FoxPro rounding: 7.3

关于如何在不诉诸完全笨拙的黑客攻击的情况下准确复制遗留系统的价值的任何建议?

4

1 回答 1

1

您的问题可能与浮点精度有关。在 FoxPro 程序循环之前,它将值存储在什么类型的变量中?你用什么类型的?

如果 FoxPro 程序使用的浮点数比您在 C# 中使用的精度低(反之亦然),这可能是您看到的差异的原因。

于 2012-11-30T21:08:05.740 回答