【发布时间】:2012-11-30 20:53:46
【问题描述】:
我需要采用XBase-style 语言(在本例中为 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
关于如何在不采用完全笨拙的黑客攻击的情况下准确复制遗留系统的价值的任何建议?
【问题讨论】:
-
您使用的是哪个版本的 Foxpro。我在 VFP 中尝试了你的 LINQ 结果,它作为一个变量(未指定的显式类型)、作为一个硬数字通过 round(7.2499....、1)和作为强类型小数,正确地向下舍入到 7.2,设置变量到 7.2499... -- (全长),它们都四舍五入到 7.2
标签: .net decimal rounding visual-foxpro