XBase语言舍入怪异

时间:2012-11-30 20:53:47

标签: .net decimal rounding visual-foxpro

我需要以XBase-style语言(在本例中为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

有关如何在不使用完全kludgey hack的情况下从遗留系统中精确复制值的任何建议?

1 个答案:

答案 0 :(得分:1)

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

如果FoxPro程序使用的浮点数的准确性低于C#中的浮点数(反之亦然),则可能是您看到的差异的原因。

相关问题