在将整数列与十进制值相乘并添加整数列时,EF6在处理舍入方面似乎不一致.
- // CREATE TABLE MyTable (MyIntValue INT NOT NULL)
- // INSERT INTO MyTable (MyIntValue) VALUES (10)
- const int IntScale = 5;
- const decimal DecimalScale = 5;
- const decimal DecimalScale2 = 5.0m;
- context.Set<MyTable>()
- .Select(row => new
- {
- WithFloats = 0.5f + (row.MyIntValue * 5.0f),// 50.5
- WithDecimals = 0.5m + (row.MyIntValue * 5.0m),// 51
- WithDecimals2 = 0.5m + ((decimal)row.MyIntValue * 5.0m),// 50.5
- WithDecimals3 = 0.5m + ((decimal)row.MyIntValue * IntScale),// 51
- WithDecimals4 = 0.5m + ((decimal)row.MyIntValue * (decimal)IntScale) // 51
- WithDecimals5 = 0.5m + ((decimal)row.MyIntValue * DecimalScale) // 51
- WithDecimals6 = 0.5m + ((decimal)row.MyIntValue * DecimalScale2) // 50.5
- })
- .Single();
当然这不是预期/正确的行为?我希望WithDecimals值为50.5(而不是51).我忽略了简单的事情吗?如何在不更改其他常量类型的情况下确保WithoutDecimals不会被舍入?
为WithFloats和WithDecimals(分别)生成的sql:
- ,CAST(0.5 AS REAL) + (CAST(MyIntValue AS REAL) * CAST(5 AS REAL)) AS WithFloats,0.5 + (CAST(MyIntValue AS DECIMAL(19,0)) * CAST(5 AS DECIMAL(18))) AS WithDecimals