1

我有一个 SQL 表,它有两列纬度和经度,其值分别为 29.47731 和 -98.46272。SQL Server 中的列数据类型是浮点数。

当我们使用 _context.Table.ToListAsync() 之类的 EF 核心检索记录时,它会检索记录,但是当它转换为 c# 等效双精度时?数据类型,它会添加额外的数字,例如 -98.4627199999999。

我怎样才能避免这种情况?它应该返回与数据库中相同的值。

4

2 回答 2

1

SQL Float 和 C# Double 是不精确的数据类型,它们存储的数字非常接近,但通常不是精确的数字。如果您需要保持准确的值,您应该使用 SQL Numeric 数据类型,它允许您指定有效位数;虽然 C# Decimal 数据类型仍然不精确,但它将提供比 Double 更高精度的近似值。

于 2020-09-03T17:55:06.107 回答
0

我发现您的数据不稳定并且您正在处理十进制值,这可能是一个“精确符号”问题。

试着看看这些:

SQL: https ://docs.microsoft.com/en-us/sql/t-sql/data-types/decimal-and-numeric-transact-sql?view=sql-server-ver15

C# https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/floating-point-numeric-types

这些应该指导您使用最精确的符号来适应您的情况:-)

于 2020-09-03T20:55:51.230 回答