Linq to SQL 是截断十进制类型而不是舍入它。显然这是预期的行为。为了解决这个问题,我正在对我的 C# 代码中的值进行四舍五入。例如,假设我有这个:
public class Foo
{
public decimal SomeNumber { get; set; }
}
SomeNumber 的数据库类型是十进制 (9,5)。这种精度是客户做出的商业决策。
如果代码中的 SomeNumber 为 .00079547,则 L2S 在将查询发送到 SQL Server 时会将其截断为 .00079。我需要做的是让数字四舍五入到 0.00080。为了做到这一点,我的代码中有这个方法:
private static decimal RoundToMatchSqlServerPrecision(decimal numberToRound)
{
const int roundingPlaces = 5;
return Math.Round(numberToRound, roundingPlaces);
}
如您所见,我现在拥有与 DB 中的类型紧密耦合的 C# 代码。如果我们更改数据库中的类型,我们将不得不记住更改此代码,这并不酷。我有两个问题:
- 有没有更好的办法?
- 如果我必须把这个四舍五入的逻辑放在代码中,把它放在业务逻辑层还是数据访问层有意义吗?