[讨论]VB的10倍Bug

yuliang0828 2003-06-07 02:14:22
昨天晚上在调试一个进程条程序时发现了一个奇怪的事情。请看以下代码:

Dim i as Single/Double/或者干脆不声明类型

Private sub Command1_Click()

Print i

i=i+0.01

if i=0.1 then msgbox "Hello"

End Sub


然后你就单击这个按钮吧,正常应该10次就弹出Hello的对话框,但过了0.1都没有出现,我思考了许久都没有想清楚,是个Bug吗?还是硬件的原因,或者是我的VB没打补丁?哪位高手知道,请指教!
...全文
21 点赞 收藏 6
写回复
6 条回复
hillmanweb 2003年06月08日
二楼已经解释得够清楚啦,如果需要精确一点的小数计算,你可以声明变量为Currency类型的,你试试效果。
回复 点赞
quickboy19821982 2003年06月08日
好玩
回复 点赞
soyan 2003年06月07日
是的
回复 点赞
myhot-河马吃草 2003年06月07日
真有意思..
回复 点赞
rappercn 2003年06月07日
计算机中浮点数是离散分布的。所以绝大多数的数只能以一个接近它的数来表示,接近的程度依赖于数的精度(单精度,双精度)。例如 0.1就可能表示为 0.0999999999... 或 0.1000000001...(计算机中是由一个二进制的小数和一个阶码表示) 由于存在精度上的误差就出现你说讲到的现象。8.28725321453883 和 8.28725321453882 在计算机中的表示可能存在误差,所以结果存在误差就不奇怪了。8.2872 - 8.2871 =0.0001 和 9.99999999997669E-05 只相差 0.0000000000000002331 已经很精确了。
用浮点就是这样!
由于上述原因,一般在比较浮点数一般不使用等号。也就是说,不使用8.2872 - 8.2871 =0.0001这样的形式,而是看两个浮点的差的绝对值是否非常接近零,如Abs(8.2872 - 8.2871 - 0.0001) < 1e-10就认为8.2872 - 8.2871 =0.0001了。
回复 点赞
佛的光辉 2003年06月07日
这是个浮点数的问题,并不是vb的BUG。
回复 点赞
发动态
发帖子
API
创建于2007-09-28

1196

社区成员

2.3w+

社区内容

VB API
社区公告
暂无公告