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的范围了啊。。。
最新回答
凉城无爱
2024-10-16 08:50:34
哦,这个结果我已经运行过了! 都是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的过程中,导致结果运算出错。就导致后面一系列的错误了。。 如果你还想查具体原因,参照单精度的范围,自己再仔细研究了。
年少总有梦
2024-10-16 14:19:35
这是“精度”的问题,
这个 For i = 0 To 0.1 Step 0.01 的i值远远超过了Single的范围,先看看Single与double的区别你就会明白为什么: