2013-06-02 97 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中指定的內容)。

相關問題