Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2217|回复: 4

[已解决]一个简单的循环,一个小数奇怪的小数,求解释

[复制链接]
发表于 2013-4-17 18:59 | 显示全部楼层 |阅读模式
本帖最后由 fjmxwrs 于 2013-4-17 19:01 编辑
  1. Sub main()
  2. i = 0
  3. For lambda = 0.92 To m Step 0.001              ’m不是变量,实际运行前写成数字,比如0.999
  4. i = i + 1
  5. Cells(1, i) = lambda
  6. Next lambda
  7. End Sub
复制代码


一个很简单的程序,目的是让excel表格第一行逐个输出lambda,从0.92开始,到m结束,m可以使0.937,0.999这样的数字

如果m=0.936,ok,excel第一行输出的最后一个数字是0.936
如果m=0.937,ok,excel第一行输出的最后一个数字是0.937,一切正常
但奇葩的是:如果m=0.938,excel第一行输出的最后一个数字竟然还是0.937!!!
从此,如果m=0.939,ok,excel第一行输出的最后一个数字是0.938
如果m=0.940,ok,excel第一行输出的最后一个数字是0.939

问题就在于0.938有什么特殊的吗?为什么从0.938开始就出问题了?
太奇怪了!
最佳答案
2013-4-17 19:31
Dim i As Single
Sub test1()
    For i = 0.02 To 0.021 Step 0.001
        Debug.Print i
    Next i
End Sub

Sub test2()
    For i = 0.021 To 0.022 Step 0.001
        Debug.Print i
    Next i
End Sub

Sub test3()
    For i = 0.0021 To 0.0022 Step 0.0001
        Debug.Print i
    Next i
End Sub


对test比较,声明i和不声明i
不会证明原理,等学习。我觉得是:
如果i的精度足够,结果就对;
如果i的精度不够,结果就错

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2013-4-17 19:08 | 显示全部楼层
回复

使用道具 举报

发表于 2013-4-17 19:31 | 显示全部楼层    本楼为最佳答案   
Dim i As Single
Sub test1()
    For i = 0.02 To 0.021 Step 0.001
        Debug.Print i
    Next i
End Sub

Sub test2()
    For i = 0.021 To 0.022 Step 0.001
        Debug.Print i
    Next i
End Sub

Sub test3()
    For i = 0.0021 To 0.0022 Step 0.0001
        Debug.Print i
    Next i
End Sub


对test比较,声明i和不声明i
不会证明原理,等学习。我觉得是:
如果i的精度足够,结果就对;
如果i的精度不够,结果就错

回复

使用道具 举报

 楼主| 发表于 2013-4-17 19:54 | 显示全部楼层
爱疯 发表于 2013-4-17 19:31
Dim i As Single
Sub test1()
    For i = 0.02 To 0.021 Step 0.001

谢谢爱疯老师,原来得设置变量为单精度型
回复

使用道具 举报

发表于 2013-4-17 20:03 | 显示全部楼层
fjmxwrs 发表于 2013-4-17 19:54
谢谢爱疯老师,原来得设置变量为单精度型

我也是试出来的,于是那么猜想的。但原理说不上来。

等高手来了,再学习吧。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 19:44 , Processed in 0.381677 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表