我承担了将一个非常古老的经典 ASP/VBScript/Access 网站转换为“当前”网站的任务。正如您所怀疑的那样,大部分操作都更容易重做,但是有一个报告页面依赖于一堆没有记录的计算,所以我只需要使用他的代码/公式,但将它们移动到 C# .
只是为了全面披露,我将 Access 数据库毫无问题地导入 SQL Server。我使用 EntityFramewok PowerTools(代码优先)对新数据库进行逆向工程并创建我的 .edmx 文件。我注意到,当 EntityFramework 为我创建 .edmx 时,它在 C# 类中将数据库中浮动的字段定义为可为空的 Doubles(Double?)...是否存在任何转置、截断或更改值的风险将float转换为可为空的double时的方式?
我认为值得怀疑的另一个地方是四舍五入。显然,四舍五入的数学并没有改变,但我想知道 VBScript 和 C# 在如何四舍五入方面是否有任何已知差异。
所以VBScript中的这些行
varA1=oDataRs("boundData")
varB1i=varA1*3.0689
varB1=round(varB1i,3)
变成这是 C#
var newVal = Math.Round(boundData.Value * 3.0689,3);
我没有将任何东西转换为双精度或十进制,只是在它从数据库中出来时使用它。我必须使用 .Value 否则我不能乘以 Double?和双。
这些值非常接近,但在一个非常重要的数据上相差约 0.036,我找不到任何原因。