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

奇怪为什么第十三步出现了误差?
扩大循环次数,还会出现新的误差
真是有点奇怪
...全文
33 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
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型的一些精度问题

7,762

社区成员

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

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