| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1018 人关注过本帖
标题:ASP对MSSQL数据库中数据相加结果出现很小偏差
只看楼主 加入收藏
MrRuan
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-10-15
收藏
 问题点数:0 回复次数:3 
ASP对MSSQL数据库中数据相加结果出现很小偏差
在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类型会不够用所以不能采用)

请问为什么会出现这种情况呢?请帮忙解决问题 谢谢!
搜索更多相关主题的帖子: 数据库 MSSQL 偏差 ASP 相加 
2008-10-15 12:46
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
收藏
得分:0 
涉及浮点数的二进制存储。类似于科学计数法,计算机里浮点数是这样存储的:阶码+尾数。阶码和尾数都存在给定长度的二进制位里面,二进制位的大小直接决定了阶码和尾数能够存放的值的范围。事实上,有限位二进制能够表示的小数必然是2^-n的整数倍,如果你会转化十进制(小数)到二进制你就会知道,0.8用二进制存是0.1100,1100循环。在有限位内必然无法表示0.8这个准确的值。计算几何与计算机解方程里面我们一般不要求结果精确相等,只要小于一个eps=1e-8之类的结果漂移就可以了。不愿意看计算机基础的人可以无视掉,我以为弄程序开发的人至少要了解二进制什么的,这都是很基础的知识。

你可以考虑截尾,比如精确到0.0001之类的。
2008-10-15 13:12
MrRuan
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-10-15
收藏
得分:0 
斑竹很牛 谢谢了 我以为是我的程序出错 感谢您!
2008-10-15 13:25
lele2007
Rank: 5Rank: 5
来 自:广东省深圳
等 级:职业侠客
威 望:6
帖 子:1028
专家分:305
注 册:2007-9-4
收藏
得分:0 
把二进制的那些知识给忘了

学习编程www.
2008-10-17 16:56
快速回复:ASP对MSSQL数据库中数据相加结果出现很小偏差
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031186 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved