Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#数学。四舍五入和可为零的双打_C#_Sql_Ms Access_Vbscript - Fatal编程技术网

C#数学。四舍五入和可为零的双打

C#数学。四舍五入和可为零的双打,c#,sql,ms-access,vbscript,C#,Sql,Ms Access,Vbscript,我承担了将一个非常古老的经典ASP/VBScript/Access网站转换为“当前”网站的任务。正如你可能会怀疑的那样,大部分都很容易重做,但是有一个报告页面依赖于一系列没有记录的计算,所以我只需要使用他的代码/公式,但将它们移到C 为了完全公开,我将Access数据库导入SQL Server,没有任何问题。我使用EntityFramewok PowerTools(代码优先)对新数据库进行反向工程,并创建我的.edmx文件。我注意到,当EntityFramework为我创建.edmx时,它将数据

我承担了将一个非常古老的经典ASP/VBScript/Access网站转换为“当前”网站的任务。正如你可能会怀疑的那样,大部分都很容易重做,但是有一个报告页面依赖于一系列没有记录的计算,所以我只需要使用他的代码/公式,但将它们移到C

为了完全公开,我将Access数据库导入SQL Server,没有任何问题。我使用EntityFramewok PowerTools(代码优先)对新数据库进行反向工程,并创建我的.edmx文件。我注意到,当EntityFramework为我创建.edmx时,它将数据库中的浮动字段定义为C#类中的可空双精度(Double?)。在将浮动转换为可空双精度时,是否存在以任何方式转置、截断或更改值的风险

我认为另一个值得怀疑的地方是四舍五入。显然,取整的数学原理没有改变,但我想知道VBScript和C#在取整方式上是否有任何已知的差异

所以这些行在VBScript中

varA1=oDataRs("boundData")
varB1i=varA1*3.0689
varB1=round(varB1i,3)
这是C#

我没有把任何东西转换成双精度或十进制,只是在它从数据库中出来时使用它。我必须使用.Value,因为我不能乘一个Double?还有双人间

这些值非常接近,但在一个非常重要的数据段上相差约.036,我找不到任何原因。

事实上,而且,只要不指定middpointrounding.AwayFromZero,就应该得到一致的结果

真正有趣的问题是Access数据库中的源数据是浮点数还是货币列。如果是货币,那么应该使用十进制,而不是双精度。如果被乘以的数字的大小相差足够大,那么这可能会导致微小的差异


对于特别重要的数据,boundData的价值是什么?

感谢您提供的信息!我检查了原始的Access电子表格,它们存储为数据类型“Number”。在我发布的示例之前和之后都有大量代码,但它们在检索和取整方面都与示例相似。BoundData在.001到9.999之间,没有一个是货币值。在Access表设计视图中,“数字”更像是一个数据类型类别。进一步查看“字段属性”部分的“常规”选项卡。在“字段大小”选择框中查找特定类型(字节、整数、长整数、单精度、双精度等)。谢谢。它们实际上是Double,Required设置为No。所以我想可以为null的Double是有意义的;)我想我是在要求一份工作。你是用常数乘以0.001,当你四舍五入时,你得到0.004?错误案例的输入值、预期结果和实际结果是什么?例如,对于9.999,我希望我的结果是30.686.Rob&@HansUp-感谢您的帮助。事实证明,我在两个数据源之间有一些不匹配的数据,这与我要走的路无关。无论如何,我都把这个作为答案,因为这是对我问题的一个极好的回答。
var newVal = Math.Round(boundData.Value * 3.0689,3);