浮点精度错误 LINQ vs Query
Float presicion error LINQ vs Query
我们将从使用 Dapper 转向使用 Entity framework。有这种方法应该 return 给定 Id 的升数。
示例:
|-----|--------|
| Id | Litres |
|-----|--------|
| 1 | 2.75 |
|-----|--------|
| 1 | 2.113 |
|-----|--------|
| 2 | 1.23 |
|-----|--------|
在这种情况下,结果应为:
id: 1 SumLitres: 4.863
id: 2 SumLitres: 1.23
在实际情况下,有数千个条目,使用 dapper 和 Linq 时,这些条目之和的精度不同。我们可以接受 3 位小数精度,但不能低于它。
精巧的查询:
const string query = @"
SELECT Id, Sum(Litres) as Litres
FROM Litres
GROUP BY Id;
linq 查询:
context.Litres.Select(x => new { x.Id, x.Litres})
.GroupBy(x => x.Id)
.AsNoTracking()
.ToList()
.Select(g => new { Id = g.Key, Litres = g.Sum(s => s.Litres) })
.ToList();
问题是结果在小数点后第二位不同,我不知道要查询的哪一个结果的精度最高?
谁知道怎么提高精度或者哪个精度最高?
列升的数据类型为:实数。
很可能在从 SQL Real 转换为 .Net Single 时有一些舍入:Sql server real datatype, what is the C# equivalent?
您可以尝试使用实体上下文执行原始 SQL:https://msdn.microsoft.com/en-us/library/jj592907(v=vs.113).aspx
我们将从使用 Dapper 转向使用 Entity framework。有这种方法应该 return 给定 Id 的升数。
示例:
|-----|--------|
| Id | Litres |
|-----|--------|
| 1 | 2.75 |
|-----|--------|
| 1 | 2.113 |
|-----|--------|
| 2 | 1.23 |
|-----|--------|
在这种情况下,结果应为:
id: 1 SumLitres: 4.863 id: 2 SumLitres: 1.23
在实际情况下,有数千个条目,使用 dapper 和 Linq 时,这些条目之和的精度不同。我们可以接受 3 位小数精度,但不能低于它。
精巧的查询:
const string query = @"
SELECT Id, Sum(Litres) as Litres
FROM Litres
GROUP BY Id;
linq 查询:
context.Litres.Select(x => new { x.Id, x.Litres})
.GroupBy(x => x.Id)
.AsNoTracking()
.ToList()
.Select(g => new { Id = g.Key, Litres = g.Sum(s => s.Litres) })
.ToList();
问题是结果在小数点后第二位不同,我不知道要查询的哪一个结果的精度最高?
谁知道怎么提高精度或者哪个精度最高?
列升的数据类型为:实数。
很可能在从 SQL Real 转换为 .Net Single 时有一些舍入:Sql server real datatype, what is the C# equivalent?
您可以尝试使用实体上下文执行原始 SQL:https://msdn.microsoft.com/en-us/library/jj592907(v=vs.113).aspx