gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 00:43:58 25 4
gpt4 key购买 nike

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

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

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

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

mgmt studio 中的以下查询...
更新 TheTable SET TheDecimalColumn = 222.259
当列是decimal(6,1)时将val设置为222.3,当它是decimal(7,2)时将val设置为222.26

谢谢

最佳答案

这是 sqlparameter,它必须这样做,因为舍入分数不是标准化的:有不同类型的舍入算法,用于不同类型的领域,例如银行业使用不同类型的舍入标准。

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

关于linq-to-sql - LINQ to SQL - 十进制数据类型截断而不是四舍五入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/570342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com