注册 登录
编程论坛 SQL Server论坛

关于float数据类型存储数据

thjanxd 发布于 2008-04-25 14:54, 1070 次点击
各位高手:
小弟有这样一个问题:
企业管理器中,创建表abcc
这样的结构           列:      a float(8)
                               b float(8)
                               c float(8)
存储过程中创建
creat procedure dbo.bbb @a float(8)
insert into abcc (a,b,c) values (@a,@a*.2,@a*.08)
go
查询分析器中运行该存储过程(在对象浏览器中,右键打开存储过程运行)参数@a =12345678.1234
得到结果
                  a                b                c
                12345678          2469135.75        987654.1875
如果在查询分析器中直接写语句
insert into abcc (a,b,c) values (12345678.1234,12345678.1234*.2,12345678.1234*.08)
得到结果
                    a                   b                c
                12345678.1234       249135.62468       987654.249872
我想问一下,为什么执行的同一个语句,存储过程运行的结果会有这么大的误差,怎么避免?如何设置下存储过程?
因为这些数字都是钱数、金额,最大误差也得在小数点后2位,也就是到分,现在的误差太大了
请高手指教。


另外,那位大侠有关于float 数据类型的详细介绍,给提供一下,我搜不到,联机帮助介绍的也少。

[[it] 本帖最后由 thjanxd 于 2008-4-25 14:56 编辑 [/it]]
4 回复
#2
lff6422008-04-25 15:17
没理由啊.我想跟你电脑的精度有关吧.
我这里的数据是:
12345678.123400001    2469135.6246800004    987654.24987200007
12345678.123400001    2469135.6246799999    987654.24987199996
#3
thjanxd2008-04-25 15:56
你的电脑按照我的操作方法两次得到同样结果么?
电脑精度该在哪里调啊?不懂啊
#4
thjanxd2008-04-25 15:57
你运行那个存储过程是怎么运行的?
是在查询分析器中写语句,还是用鼠标操作的?
#5
thjaxd2008-04-26 03:05
晕,还没弄明白呢,怎么就要沉了啊,发问的不少啊
1