LINQ to SQL - 截断十进制数据类型而不是舍入

Jer*_*eir 4 linq-to-sql

我有一个十进制的DB列(6,1)当使用LINQ to SQL保存记录时,它会截断值而不是舍入.

因此,例如,如果在生成的LINQ to SQL查询中传递给此列的参数具有此值... - @ p1:输入十进制(大小= 0; Prec = 6; Scale = 1)[222.259]数据将在DB中显示为222.2而不是222.3

然后,如果我将DB中的同一列更改为十进制(7,2)并且我不重新生成LINQ to SQL类,则使用LINQ保存记录仍将截断... - @ p1:输入十进制(大小= 0; Prec = 6; Scale = 1)[222.259]数据将在DB中显示为222.20而不是222.26(或222.30)

有谁知道这是否是LINQ的正确行为?或者是SqlServer提供商?它与在mgmt studio中手动编写查询的行为方式不同,这就是为什么我对为什么它是截断而不是舍入而感到困惑的原因.

mgmt studio中的以下查询... UPDATE TheTable SET TheDecimalColumn = 222.259在列为十进制(6,1)时将val设置为222.3,在为十进制时为72.26(7,2)

谢谢

Fra*_*uma 6

它是sql参数,它必须这样做,因为舍入分数不是标准化的:有不同类型的舍入算法,它们用于不同类型的区域,例如银行使用不同类型的舍入标准.

如果要进行舍入,请在设置实体中的值之前通过舍入值来自己定义.这是合乎逻辑的,因为您将单个数字定义为比例,因此.256不适合单个数字,这意味着您应该获得异常(linq to sql不支持内存验证)或者它被截断在较低的水平.