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

ASP对MSSQL数据库中数据相加结果出现很小偏差

MrRuan 发布于 2008-10-15 12:46, 1021 次点击
在SQL数据库中有一行记录 NowQ 的值为 -2.62 InitialQ 的值为 3.5
数据类型分别都试过 float 类型 real类型 money类型,

当要在asp中计算他们的值的时候用如下语句
<%Ksun=rs("NowQ")+rs("InitialQ")%>
<td><%=Ksun%> </td>

结果 Ksun在类型为float 类型 和real类型 时候都显示出错误 显示结果分别为 .8800001 和 .879999999999995 而在类型为 money类型时候显示结果正确为.88 (但实际使用时候mony类型会不够用所以不能采用)

请问为什么会出现这种情况呢?请帮忙解决问题 谢谢!
3 回复
#2
multiple19022008-10-15 13:12
涉及浮点数的二进制存储。类似于科学计数法,计算机里浮点数是这样存储的:阶码+尾数。阶码和尾数都存在给定长度的二进制位里面,二进制位的大小直接决定了阶码和尾数能够存放的值的范围。事实上,有限位二进制能够表示的小数必然是2^-n的整数倍,如果你会转化十进制(小数)到二进制你就会知道,0.8用二进制存是0.1100,1100循环。在有限位内必然无法表示0.8这个准确的值。计算几何与计算机解方程里面我们一般不要求结果精确相等,只要小于一个eps=1e-8之类的结果漂移就可以了。不愿意看计算机基础的人可以无视掉,我以为弄程序开发的人至少要了解二进制什么的,这都是很基础的知识。

你可以考虑截尾,比如精确到0.0001之类的。
#3
MrRuan2008-10-15 13:25
斑竹很牛 谢谢了 我以为是我的程序出错 感谢您!
#4
lele20072008-10-17 16:56
把二进制的那些知识给忘了
1