注册 登录
编程论坛 ASP技术论坛

数字写入sql server数据库为什么会发生改变?

fengmumei 发布于 2007-11-07 09:32, 822 次点击

我用asp+sql server数据库时发现将数据保存到数据库时发生变化,其中数据库表中字段的类型是:float,有默认值为0。
以期望将20.1写入数据库表中为例,我曾分别用insert into方式 和rs.addnew方式将其保存到数据库中,但从sql查询分析器或sql企业管理器中看到的数据就不是20.1 而是20.09999999999999,有时是20.10000000000001,从数据库输出显示时如果用formatnumber函数可以正确的显示,但是如果涉及数据的比较时就会有问题了:20.1>20.09999999999999,20.1<20.10000000000001,这样就会出现错误提示。
想过保存时先用formatnumber或round函数处理,可是也没有实现。而且保存数据是不是每次都会出现,但出现的几率很大,已严重影响整个软件系统的正常运行。
请教各位,这个问题该如何解决?

4 回复
#2
永夜的极光2007-11-07 11:01
浮点数都会存在这种误差的,因为计算机的精度是有限的

你是想要比较两个浮点数是否相等吗?

可以计算两个数的差值,如果小于一定的值(一般是1e-6),就认为两个数相等

而如果你想做高精度的话,那只能用字符串来保存了
#3
purana2007-11-07 11:20
float是近似值..
可以试试用decimal类型或numeric
#4
fengmumei2007-11-10 08:17
好的,我会考虑的,谢谢各位了
#5
fengmumei2007-11-10 09:45

用numeric和decimal类型试过了,没有成功,在数据库中可以实现算术运算,但输出后再做运算就不行了。
例如用sum()函数何以得到正确结果,但如果从数据库输出后在加减就不行了,说是“Microsoft VBScript 运行时错误 错误 '800a000d' 类型不匹配”,难道说输出后的就不是数字类型的了吗?成为字符型的了?

1