关于vb 中 for next语句中循环变量与step的问题

n=0Fori=0To1Step0.1n=n+1Next和n=0Fori=0To0.1Step0.01n=n+1Next有什么区别,为什么前者n的值为10,后者n的值为1... n = 0
For i = 0 To 1 Step 0.1
n = n + 1
Next

n = 0
For i = 0 To 0.1 Step 0.01
n = n + 1
Next
有什么区别,为什么前者n的值为10,后者n的值为11
Dim i As Single
Dim n As Integer
当i 是 single的时候就有区别
当i 是 double的时候就没有区别
我试验过了结果跟step后数字的类型也有关系,结论是:double没有问题,single就有可能有问题
single精度就这么低吗,怎么练0.1的精确度都达不到啊?
三楼,
我怎么看不出来0.1超出single的范围了啊。。。
展开
 我来答
百度网友6e017157
推荐于2018-04-05 · TA获得超过1046个赞
知道大有可为答主
回答量:2218
采纳率:50%
帮助的人:1243万
展开全部
哦,这个结果我已经运行过了!
都是11!没什么区别!
从0-1,每次增加0.1,循环11次。所以累加后和为11
从0-0.1,每次增加0.01,循环11次,所以累加后和也为11
没什么区别!!!
下面是我运行的代码
Private Sub Command1_Click()
n = 0
For i = 0 To 0.1 Step 0.01
n = n + 1
Next
Print "n=" & n
k = 0
For j = 0 To 0.1 Step 0.01
k = k + 1
Next
Print "k=" & k
End Sub
刚才又把i的变量定义为整型,单精度,双精度。分别实验了一下,用msgbox尝试输出了每次循环中i与n的结果,发现当单精度的时候,i=0.1,....0.7,0.800001,0.90001,所以导致最后结果就变成10次了!
因此怀疑是单精度的时候,在0.7+0.1的过程中,导致结果运算出错。就导致后面一系列的错误了。。
如果你还想查具体原因,参照单精度的范围,自己再仔细研究了。
56...7@qq.com
2010-04-27 · TA获得超过883个赞
知道小有建树答主
回答量:533
采纳率:0%
帮助的人:634万
展开全部
这是“精度”的问题,

这个 For i = 0 To 0.1 Step 0.01 的i值远远超过了Single的范围,先看看Single与double的区别你就会明白为什么:

Single(单精度浮点型)变量存储为 IEEE 32 位(4 个字节)浮点数值的形式,
它的范围在负数的时候是从 -3.402823E38 到 -1.401298E-45,
而在正数的时候是从 1.401298E-45 到 3.402823E38。Single 的类型声明字符为感叹号 (!)。

Double(双精度浮点型)变量存储为 IEEE 64 位(8 个字节)浮点数值的形式,
它的范围在负数的时候是从 -1.79769313486232E308 到 -4.94065645841247E-324,
而正数的时候是从 4.94065645841247E-324 到 1.79769313486232E308。Double 的类型声明字符是数字符号 (#)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
河中的沙粒
2010-04-27 · TA获得超过266个赞
知道小有建树答主
回答量:129
采纳率:0%
帮助的人:111万
展开全部
single 为单精度浮点型,由于你用的是小数,在内存计数器中0.01和0.1的差别不只是10倍的关系,具体你可以再百科中看一下他们在内存中的储存数是多少,所以你如果用SINGLE 类型的话就不可以用小数来区别这两种算法,如果想用小数区分的话推荐你用其他类型
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式