[讨论]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没打补丁?哪位高手知道,请指教!
...全文
52 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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。

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧