VB中一个奇怪的问题,详见例程

Alian 2003-12-11 05:40:25
Option Explicit

Private Sub Form_Load()
Dim lng As Long
Dim dblTemp As Double
Dim dblTemp2 As Double

dblTemp = 10
dblTemp2 = 0.1

Debug.Print Now & "-Start-"

For lng = 1 To 20
dblTemp = dblTemp - dblTemp2
Debug.Print lng & " - " & dblTemp
Next
End
End Sub

Debug Output:
12/11/2003 5:27:47 PM-Start-
1 - 9.9
2 - 9.8
3 - 9.7
4 - 9.6
5 - 9.5
6 - 9.4
7 - 9.3
8 - 9.2
9 - 9.1
10 - 9
11 - 8.9
12 - 8.8
13 - 8.7
14 - 8.60000000000001
15 - 8.50000000000001
16 - 8.40000000000001
17 - 8.30000000000001
18 - 8.20000000000001
19 - 8.10000000000001
20 - 8.00000000000001

奇怪为什么第十三步出现了误差?
扩大循环次数,还会出现新的误差
真是有点奇怪
...全文
5 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
sogno 2003-12-11
浮点数都有精度摆动

换用c、c++、java……都一样的
回复
boydgmx 2003-12-11
没办法,浮点数必然会有误差。
比如说吧
Private Sub Command1_Click()
Dim i As Long
Dim rs As Single

rs = 0

For i = 1 To 30000
rs = rs + 1 / 3
Next

Debug.Print rs '9999.832而不是10000
End Sub
回复
evbsky 2003-12-11
同意楼上的意见
回复
佛的光辉 2003-12-11
浮点数是有误差的
回复
wywggggaaaa2000 2003-12-11
up
回复
ByTheWay 2003-12-11
我也遇到过这个问题!不知道为什么会这样!
别小看这个问题,在很多地方就产生的大的错误!

希望有高人指点
回复
wx05 2003-12-11
这个不算是错误
回复
SoHo_Andy 2003-12-11
改为单精度后
只是不同类型变量之间的差异而已

2003-12-11 17:37:03-Start-
1 - 9.9
2 - 9.799999
3 - 9.699999
4 - 9.599998
5 - 9.499998
6 - 9.399998
7 - 9.299997
8 - 9.199997
9 - 9.099997
10 - 8.999996
11 - 8.899996
12 - 8.799995
13 - 8.699995
14 - 8.599995
15 - 8.499994
16 - 8.399994
17 - 8.299994
18 - 8.199993
19 - 8.099993
20 - 7.999993

回复
jilate 2003-12-11
没错啊,这不过是double型的一些精度问题
回复
发动态
发帖子
VB基础类
创建于2007-09-28

7453

社区成员

VB 基础类
申请成为版主
社区公告
暂无公告