2011-06-23 27 views
0

在我的调试器(VS2010)中,我可以验证是否使用SqlCeCommand将正确的值发送到我的SqlCeServer 3.5数据库SqlCeServer:Float存储不正确

查看数据后,我注意到一些我的float值是倾斜的。

  • 当我进入0.006,数据库会存储0.0060000000521540642

  • 当我进入0.012,数据库会存储0.0120000001043081

  • 当我进入0.011,数据库会存储0.0109999999403954

其他浮点值(1.125,0.875,0.75)存储就好了。

有什么特别的我必须做以确保我的float值存储正确吗?

回答

2

Don't use float:这是近似

使用固定精度:decimal/numeric

+0

好吧,所以我删除了我的数据库并重新创建它(这是我的应用程序应该做的)。这一次,我使用'SqlDbType.Decimal',而不是将'SqlCeParameter'的'SqlDbType'指定为'Single'(这是一个'float')。数据看起来不对,当我打开SQL Server Management Studio时,发现我的'SqlDbType.Decimal'参数将这些列格式化为'numeric(18,0)',并将我的值四舍五入为最接近的整数。 **如何解决这个问题?** – jp2code

+1

@ jp2code:在'decimal(p,s)'中指定p和s:不允许它们默认。 http://technet.microsoft.com/en-us/library/system.data.sqlserverce.sqlceparameter.precision.aspx – gbn

+0

OH YEAH!你好漂亮!而已!谢谢! – jp2code

0

从MSDN: “不能在数据类型范围内的所有值可以精确表示”

外貌就像你找到了其中的一些!