2013-06-02 66 views
1

我正在使用LINQtoSQL映射器和LINQ将值插入到我的数据库(SQL Server 2008 R2)中。我的应用程序有3层,当我在插入新行时跟踪我的应用程序时,一切都很顺利。但在检查我的数据库后,float类型的一个字段的值会发生变化。例如当我插入12.69时,在数据库中的值是12.6899995803833。我完全困惑,不知道该怎么做。提前致谢。当插入到数据库中时浮点值发生变化

+2

浮点数很棘手。查看http://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/特别是“不要将它存储在浮动”文章。 – Steve

回答

-1

这听起来像是一个问题,您正在从一种类型更改为更精确的另一种类型。

+0

这个数字更可能是以不同的方式打印。 float和double都不能实际存储12.69,所以实际上最初的问题是错误的 - 作者不*将* 12.69插入到数据库中。可能作者插入的浮点数最接近12.69,这更准确地打印为12.6899995803833。 BTW,12.69f的精确值(假设一个IEEE浮点型): 12.68999958038330078125 如果谁告诉你,他们已经准确地存储在12.69二进制浮点数字是错误的。 –

1

如果您希望您输入的值(以10为底)被准确表示,那么您可能希望在SQL Server中使用decimal(C#)和DECIMAL(p,s)

类型(在SQL Server和REALFLOATfloatdouble在C#是二进制(基数为2),并不能准确地表示许多十进制值。当然,十进制仍然具有有限的精度(在C#中修复,以及您在SQL Server中指定的内容)。

相关问题