C# Sql Server浮点到C双精度添加尾随零

C# Sql Server浮点到C双精度添加尾随零,c#,sql,entity-framework-core,C#,Sql,Entity Framework Core,我在SQL Server中有一个值为21.261的float列,当我使用entity framework core 2.0将该列提取到c double中时,它将变为21.261000000042,如何避免这种情况并获得21.261的精确值正如您可能已经注意到的,您的数字可能不完全是21.261,而只是一些非常精确的近似值 根据数据真正代表的内容,您可以使用不同的数据库存储类型,如“DECIMAL”。。。这通常有助于存储货币价值,即“美分” 然而,取决于编程语言是否能够处理有理数或分数,当您将数据

我在SQL Server中有一个值为21.261的float列,当我使用entity framework core 2.0将该列提取到c double中时,它将变为21.261000000042,如何避免这种情况并获得21.261的精确值正如您可能已经注意到的,您的数字可能不完全是21.261,而只是一些非常精确的近似值

根据数据真正代表的内容,您可以使用不同的数据库存储类型,如“DECIMAL”。。。这通常有助于存储货币价值,即“美分”


然而,取决于编程语言是否能够处理有理数或分数,当您将数据读回浮点时,您必须再次处理这些问题,同样也必须在打印等过程中处理这些问题。

这里有一些很好的解释,说明了为什么会发生这种情况:需要查看获取代码。此外,数据库中可能重复的值的模型正好是21.261,但在c中,当获取no时,它将变为21.2610000042。21.261不能用浮点数精确表示。SQL Server和C中都没有。请参见Zohar Peled在其comment@Tamajit,您写道,它是一个浮点列。这些列将数字保存为二进制或“base-2”数字。在“base-2”系统中,无法表示十进制或十进制10 21.261数字。正如它不可能代表⅓ 在“base-10”系统中,0.333…看起来是一个可接受的解决方案,但它并不完全相同,后面的20位数字也不相同。因此,您的SQL server根本不包含该确切数字。。或者它没有像你建议的那样使用浮动。