C#Double
不是Sql Server Decimal(X,Y)
的确切数据类型映射,它实际上映射到float(53)
。正如link中提到的,Sql Server中的float / Real
数据类型是近似值,它们总是会导致相同数据处理的不同结果,这可能会导致很多问题,尤其是在财务应用程序中。
在我们的例子中,我们已将具有小数点精度要求的Sql Server列定义为Decimal(X,Y)
并将其映射到C#Double
,但由于数据持久保存到Sql,因此导致不可预测的结果服务器,很多时候数据被截断,很少一些数据略微降低或更高。
我们尝试在十进制之外添加一个额外的数字,以便截断不会产生影响,有些事情就像列是十进制(10,2),我们而不是保存6.23
,尝试保存6.233
,但这没有任何帮助,因为它可能仍然无法保持6.23
,有时它是6.24
或6.22
如果我们想要保留C#Double和Sql Server Decimal(X,Y),我们有什么选择。可能正在使用C#Decimal
可以提供帮助,但是我们的值并非接近双倍的限制本身,所以在我看来,Decimal绝对会浪费内存,但如果它提供了正确的结果,我们仍然可以考虑
我们面临的主要挑战是数据中没有更改/修改,我们会更热衷于在C#端进行更改,因为我们的控制更多,而不是数据库架构,但欢迎任何好的建议。