实体框架Core在C#中将floatdb数据类型转换为double时正在添加数字

问题描述

我有一个sql表,该表具有两列“纬度”和“经度”,其值分别为29.47731和-98.46272。列数据类型在sql Server中为float。

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

如何避免这种情况?它应该返回与数据库中相同的值。

解决方法

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

,

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

尝试看看这些:

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

那些应该根据您的情况使用最精确的符号来指导您的工作:-)